La fonction password_hash() est utilisée pour créer un hachage du mot de passe.
Configuration requise pour la version PHP : PHP 5 >= 5.5.0, PHP 7
chaîne password_hash ( string $password , int $algo [, array $options ] )
password_hash() crée un hachage du mot de passe en utilisant un algorithme de hachage unidirectionnel suffisamment puissant. password_hash() est compatible avec crypt(). Ainsi, 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
- Utiliser l'algorithme bcrypt (par défaut dans PHP 5.5.0). Notez que cette constante changera à mesure que PHP ajoutera des algorithmes plus récents et plus puissants. Par conséquent, la longueur des résultats générés à l’aide de cette constante changera à l’avenir. Par conséquent, la colonne de la base de données où sont stockés les résultats peut dépasser 60 caractères (de préférence 255 caractères).
PASSWORD_BCRYPT
- Crée un hachage à l'aide de l'algorithme CRYPT_BLOWFISH
. Il en résulte un crypt() compatible avec "$2y$". Le résultat sera une chaîne de 60 caractères, ou FALSE
en cas d'échec.
PASSWORD_ARGON2I
- Crée un hachage à l'aide de l'algorithme de hachage Argon2.
Options prises en charge par PASSWORD_BCRYPT :
salt(string) - Fournissez manuellement une valeur salt pour hacher le mot de passe. Cela évitera la génération automatique de sel.
Lorsque cette valeur est omise, password_hash() génère automatiquement une valeur de sel aléatoire pour chaque hachage de mot de passe. Ce mode de fonctionnement est intentionnel.
Remarque : L'option salt est obsolète à partir de PHP 7.0.0. Pour l'instant, il est préférable d'utiliser simplement le sel généré par défaut.
cost (integer) - Représente le coût utilisé par l'algorithme. Il existe des exemples de valeurs de coût sur la page crypt().
En cas d'omission, la valeur par défaut est 10. Ce coût constitue un bon résultat, mais vous pourrez peut-être augmenter cette valeur en fonction de votre propre matériel.
Options prises en charge par PASSWORD_ARGON2I :
memory_cost ( integer ) - Mémoire maximale (unité : octet) lors du calcul du hachage Argon2. Valeur par défaut : PASSWORD_ARGON2_DEFAULT_MEMORY_COST
.
time_cost ( entier ) – Temps maximum passé à calculer le hachage Argon2. Valeur par défaut : PASSWORD_ARGON2_DEFAULT_TIME_COST
.
threads ( entier ) – Le nombre maximum de threads à utiliser lors du calcul des hachages Argon2. Valeur par défaut : PASSWORD_ARGON2_DEFAULT_THREADS
.
Description du paramètre :
password : une valeur de hachage créée par password_hash().
algo : constante d'algorithme cryptographique utilisée pour indiquer l'algorithme utilisé lors du hachage des mots 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, qui est utilisé pour spécifier le nombre de niveaux de récursion de l'algorithme. Des exemples de ces deux valeurs peuvent être trouvés sur la page crypt().
En cas d'omission, une valeur de sel aléatoire et un coût par défaut seront utilisés.
Renvoie le mot de passe haché, ou FALSE en cas d'échec.
Le résultat est :
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
Le résultat est :
$2a$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
Exemple de réglage manuel de la valeur du sel
<?php /* * * Notez que la valeur salt ici est générée de manière aléatoire. * N'utilisez jamais une valeur de sel fixe ou une valeur de sel qui n'est pas générée aléatoirement. * * Dans la plupart des cas, vous pouvez laisser password_hash générer automatiquement une valeur de sel aléatoire pour vous */ $options = [ ' coût ' => 11 , ' sel ' = > mcrypt_create_iv ( 22 , MCRYPT_DEV_URANDOM ) , ] ; password_hash ( " rasmuslerdorf " , PASSWORD_BCRYPT , $options ) ?> ;Le résultat est :
$2y$11$q5MkhSBtlsJcNEVsYh64a.aCluzHnGog7TQAKVmQwO9C8xb.t89F.
Exemple de Password_hash() pour trouver le meilleur coût
<?php /* * * Cet exemple effectue un test de référence sur le serveur pour tester le coût que le serveur peut supporter * La valeur la plus élevée peut être définie sans ralentir de manière significative le serveur * 8-10 est un bon résultat, dans le serveur Si c'est assez rapide, plus c'est haut, mieux c'est. * L'objectif de code suivant est ≤ 50 millisecondes (millisecondes), * adapté au système pour gérer la connexion interactive. */ $timeTarget = 0,05 ; // 50 millisecondes (millisecondes) $coût = 8 ; faire { $cost ++; $start = microtime ( true ) ; password_hash ( " test " , PASSWORD_BCRYPT , [ " cost " = > $ cost ] ) $ end = microtime ( true ) ; alors que ( ( $end - $start ) < $timeTarget ) écho ; " Coût approprié trouvé : " .Le résultat est :
Coût approprié trouvé : 10
Exemple utilisant Argon2 :
<?php écho ' Hachage Argon2 : ' . password_hash ( ' rasmuslerdorf ' , PASSWORD_ARGON2I ) ? > ;Le résultat est :
Hachage Argon2 : $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0