Fonction PHP password_hash()

PHP 密码散列算法Algorithmes de hachage de mots de passe PHP

La fonction password_hash() est utilisée pour créer un hachage d'un mot de passe.

Prérequis de version PHP : PHP 5 >= 5.5.0, PHP 7

Syntaxe

string password_hash ( string $password , int $algo [, array $options ] )

password_hash() utilise un algorithme de hachage à sens unique suffisamment robuste pour créer un hachage d'un mot de passe. password_hash() est compatible avec crypt(). Par conséquent, les hachages de mots de passe créés par crypt() peuvent également être utilisés avec password_hash().

Algorithmes actuellement pris en charge :

  • PASSWORD_DEFAULT- Utilise l'algorithme bcrypt (par défaut dans PHP 5.5.0). Notez que cette constante changera à mesure que PHP ajoute des algorithmes plus récents et plus robustes. Par conséquent, la longueur du résultat généré à l'aide de cette constante peut changer à l'avenir. Par conséquent, la colonne de la base de données qui stocke le résultat peut dépasser 60 caractères (de préférence 255 caractères).
  • PASSWORD_BCRYPT- UtilisezCRYPT_BLOWFISHl'algorithme pour créer un hachage. Cela produira un hachage compatible avec l'utilisation du préfixe "$2y$".crypt()Le résultat sera une chaîne de 60 caractères, ou FALSE en cas d'échec.FALSE。
  • PASSWORD_ARGON2I- Utilisez l'algorithme de hachage Argon2 pour créer un hachage.

Options prises en charge par PASSWORD_BCRYPT :

  • salt (chaîne) - Fournir manuellement un sel pour hacher le mot de passe. Cela évite de générer automatiquement un sel.

    Si cette valeur est omise, password_hash() générera automatiquement un sel aléatoire pour chaque hachage de mot de passe. Il s'agit d'un mode de fonctionnement intentionnel.

    Remarque : L'option salt est obsolète depuis PHP 7.0.0. Il est désormais préférable d'utiliser simplement le sel généré par défaut.

  • cost (entier) - Représente le coût utilisé par l'algorithme. Des exemples de valeurs de coût sont disponibles sur la page crypt().

    Lorsqu'il est omis, la valeur par défaut est 10. Ce coût est une bonne base, mais vous pouvez augmenter cette valeur en fonction de votre matériel.

Options prises en charge par PASSWORD_ARGON2I :

  • memory_cost (entier) - La mémoire maximale (en octets) à utiliser lors du calcul du hachage Argon2. Valeur par défaut :PASSWORD_ARGON2_DEFAULT_MEMORY_COST。

  • time_cost (entier) - Le temps maximal à utiliser lors du calcul du hachage Argon2. Valeur par défaut :PASSWORD_ARGON2_DEFAULT_TIME_COST。

  • threads (entier) - Le nombre maximal de threads à utiliser lors du calcul du hachage Argon2. Valeur par défaut :PASSWORD_ARGON2_DEFAULT_THREADS。

Description du paramètre :

  • password : Une valeur de hachage créée par password_hash().

  • algo : Une constante d'algorithme de mot de passe utilisée pour indiquer l'algorithme lors du hachage du mot de passe.

  • options : Un tableau associatif contenant des options. Actuellement, deux options sont prises en charge : salt, le sel (chaîne d'interférence) ajouté lors du hachage du mot de passe, et cost, utilisé pour indiquer le nombre de couches récursives de l'algorithme. Des exemples de ces deux valeurs sont disponibles sur la page crypt().

    En cas d'omission, un sel aléatoire et le coût par défaut seront utilisés.

Valeur de retour

Retourne le mot de passe haché, ou FALSE en cas d'échec.

Exemples

Exemple 1

<?php /** * Nous voulons hacher le mot de passe en utilisant l'algorithme par défaut * Actuellement BCRYPT, qui produit un résultat de 60 caractères. * * Veuillez noter qu'au fil du temps, l'algorithme par défaut peut changer, * donc l'espace de stockage nécessaire devrait dépasser 60 caractères (255 convient).*/ echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT); ?>

La sortie est :

$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

Exemple 2

<?php /** * Dans ce cas, nous augmentons le coût de BCRYPT à 12. * Notez que nous sommes passés à, ce qui produira toujours 60 caractères.*/ $options = [ 'cost' => 12, ]; echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options); ?>

La sortie est :

$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K

Exemple 3

Exemple de définition manuelle de la valeur du sel

<?php /** * Notez que le sel ici est généré aléatoirement. * N'utilisez jamais un sel fixe, ni un sel qui n'est pas généré aléatoirement. * * Dans la plupart des cas, vous pouvez laisser password_hash générer automatiquement un sel aléatoire pour vous.*/ $options = [ 'cost' => 11, 'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM), ]; echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options); ?>

La sortie est :

$2y$11$q5MkhSBtlsJcNEVsYh64a.aCluzHnGog7TQAKVmQwO9C8xb.t89F.

Exemple 4

Exemple de password_hash() pour trouver le coût optimal

<?php /** * Cet exemple évalue les performances du serveur afin de tester quel coût maximal il peut supporter. * Vous pouvez définir la valeur la plus élevée sans ralentir significativement le serveur. * 8-10 est une bonne base ; plus la valeur est élevée, mieux c'est si le serveur est suffisamment rapide. * Le code suivant cible ≤ 50 millisecondes, * adapté aux systèmes gérant des connexions interactives.*/ $timeTarget = 0.05; //50 millisecondes $cost = 8; do { $cost++; $start = microtime(true); password_hash("test", PASSWORD_BCRYPT, ["cost" => $cost]); $end = microtime(true); } while (($end - $start) < $timeTarget); echo "Coût approprié trouvé : " . $cost; ?>

La sortie est :

Appropriate Cost Found: 10

Exemple 5

Exemple utilisant Argon2 :

<?php echo 'Hachage Argon2 : ' . password_hash('rasmuslerdorf', PASSWORD_ARGON2I); ?>

La sortie est :

Argon2 hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0

PHP 密码散列算法Algorithmes de hachage de mots de passe PHP

Autres extensions