Maison >développement back-end >tutoriel php >Hachage des mots de passe avec l'API de hachage de mot de passe PHP 5.5
Points de base
password_hash()
pour le hachage des mots de passe, password_verify()
pour vérifier les mots de passe avec leurs valeurs de hachage, password_needs_rehash()
pour vérifier si les mots de passe doivent être réplamés, password_get_info()
Utilisé pour retourner le nom de l'algorithme de hachage et diverses options utilisées dans le processus de hachage. password_hash()
. password_compat
qui imite l'API et se désactive automatiquement après la mise à niveau de la version PHP à 5.5. L'utilisation de BCrypt est actuellement reconnue comme la meilleure pratique de hachage de mot de passe, mais de nombreux développeurs utilisent toujours des algorithmes plus anciens et plus faibles comme MD5 et Sha1. Certains développeurs n'utilisent même pas de sel lors du hachage. La nouvelle API de hachage dans PHP 5.5 est conçue pour attirer l'attention sur Bcrypt tout en cachant sa complexité. Dans cet article, je couvrirai les bases de l'utilisation de l'API PHP New Hash. L'API du hachage du nouvel mot de passe expose quatre fonctions simples:
password_hash()
- Utilisé pour hacher le mot de passe. password_verify()
- Utilisé pour vérifier les mots de passe en fonction de leur valeur de hachage. password_needs_rehash()
- Utilisé lors de la remise en état du mot de passe. password_get_info()
- Renvoie le nom de l'algorithme de hachage et les différentes options utilisées dans le processus de hachage. password_hash()
Bien que la fonction crypt()
soit sûre, beaucoup de gens pensent qu'il est trop complexe et trop sujet aux erreurs. Ensuite, certains développeurs utilisent un sel faible et des algorithmes faibles pour générer des hachages, tels que:
<code class="language-php"><?php $hash = md5($password . $salt); // 可行,但危险</code>
Cependant, la fonction password_hash()
simplifie notre travail et notre code peut être maintenu en sécurité. Lorsque vous avez besoin d'un mot de passe de hachage, donnez-le simplement à la fonction et il renverra une valeur de hachage qui peut être stockée dans la base de données.
<code class="language-php"><?php $hash = md5($password . $salt); // 可行,但危险</code>
c'est tout! Le premier paramètre est la chaîne de mot de passe à avoir, et le deuxième paramètre spécifie l'algorithme appliqué pour générer le hachage. L'algorithme par défaut actuel est BCrypt, mais à l'avenir, il peut ajouter un algorithme plus puissant comme algorithme par défaut et peut générer des chaînes plus grandes. Si vous utilisez PASSWORD_DEFAULT
dans votre projet, assurez-vous de stocker le hachage dans une colonne avec une capacité de plus de 60 caractères. La définition de la taille de la colonne sur 255 peut être un bon choix. Vous pouvez également utiliser PASSWORD_BCRYPT
comme deuxième paramètre. Dans ce cas, le résultat est toujours de 60 caractères. Il est important ici que vous n'ayez pas à fournir des paramètres de valeur de sel ou de coût. La nouvelle API gérera tout cela pour vous. Le sel fait partie du hachage, vous n'avez donc pas à le stocker séparément. Si vous souhaitez fournir votre propre sel (ou coût), vous pouvez le faire en passant un troisième paramètre (un tableau d'options) à la fonction.
<code class="language-php"><?php $hash = password_hash($password, PASSWORD_DEFAULT);</code>
De cette manière, vous pouvez toujours utiliser les dernières mesures de sécurité. Si PHP décide plus tard d'implémenter un algorithme de hachage plus puissant, votre code peut en profiter.
password_verify()
Maintenant que vous avez appris à générer des hachages à l'aide de la nouvelle API, voyons comment vérifier votre mot de passe. N'oubliez pas que vous stockez le hachage dans la base de données, mais ce que vous obtenez est un mot de passe en texte brut lorsque l'utilisateur se connecte. La fonction password_verify()
prend un mot de passe de texte brut et une chaîne de hachage comme deux paramètres. Renvoie True si le hachage correspond au mot de passe spécifié.
<code class="language-php"><?php $options = [ 'salt' => custom_function_for_salt(), //编写您自己的代码以生成合适的盐 'cost' => 12 // 默认成本为 10 ]; $hash = password_hash($password, PASSWORD_DEFAULT, $options);</code>
N'oubliez pas que le sel fait partie du mot de passe de hachage, c'est pourquoi nous ne le spécifions pas séparément ici.
password_needs_rehash()
password_needs_rehash()
Aide à vérifier si un hachage spécifié implémente un algorithme spécifique et utilise des options spécifiques (telles que le coût et le sel) lors de la création.
<code class="language-php"><?php if (password_verify($password, $hash)) { // 成功! } else { // 无效的凭据 }</code>
N'oubliez pas que lorsqu'un utilisateur essaie de vous connecter à votre site Web, vous devez le faire car c'est juste le moment où vous pouvez accéder à votre mot de passe en texte brut.
password_get_info()
password_get_info()
accepte un hachage et renvoie un tableau associatif contenant trois éléments:
algo
- Une constante qui identifie un algorithme spécifique algoName
- Le nom de l'algorithme utilisé options
- Diverses options utilisées lors de la génération de hachage Conclusion
La nouvelle API de hachage de mot de passe est plus facile à utiliser que l'utilisation de la fonction crypt()
. Si votre site Web s'exécute actuellement sur PHP 5.5, je recommande fortement d'utiliser la nouvelle API de hachage. Les personnes utilisant PHP 5.3.7 (ou ultérieure) peuvent utiliser une bibliothèque appelée password_compat
, qui imite l'API et se désactive automatiquement après la mise à niveau de la version PHP à 5.5.
PHP 5.5 Mot de passe Hash Hash API FAQ (FAQ)
L'API de hachage de mot de passe PHP 5.5 est une fonctionnalité dans PHP 5.5 et plus tard qui fournit aux développeurs un moyen facile de hacher et de vérifier les mots de passe de manière sécurisée. Il est important car il aide à protéger les données des utilisateurs sensibles. Si la base de données est piratée, les mots de passe du hachage sont plus difficiles à casser que les mots de passe en texte brut. L'API utilise la puissante fonction de hachage BCrypt par défaut et gère automatiquement la génération de valeurs de sel, ce qui permet aux développeurs d'implémenter plus facilement le traitement de mot de passe sécurisé.
password_hash
Comment fonctionne la fonction? password_hash
fait partie de l'API de hachage de mot de passe PHP 5.5. Il reçoit un mot de passe en texte brut et un algorithme de hachage en entrée et renvoie un mot de passe de hachage. La fonction génère également et applique également une valeur de sel aléatoire au mot de passe avant le hachage. Cette valeur de sel est contenue dans le hachage retourné, il n'est donc pas nécessaire de le stocker séparément.
password_verify
Quel est le but de la fonction? password_verify
est utilisée pour vérifier les mots de passe en fonction des mots de passe de hachage. Il reçoit un mot de passe en texte brut et un mot de passe de hachage en entrée. Cette fonction extrait les valeurs de sel et les algorithmes de hachage à partir du mot de passe haché, les applique au mot de passe en texte brut, puis compare les résultats avec le mot de passe hachis d'origine. S'il correspond, la fonction renvoie true, indiquant que le mot de passe est correct.
L'API de hachage de mot de passe PHP 5.5 est considéré comme très sécurisé. Il utilise l'algorithme de hachage BCrypt par défaut, ce qui est une fonction de hachage puissante. L'API génère et applique également automatiquement une valeur de sel aléatoire pour chaque mot de passe, ce qui aide à prévenir les attaques de table arc-en-ciel. Cependant, comme toutes les mesures de sécurité, il n'est pas infaillible et doit être utilisé dans le cadre d'une politique de sécurité complète.
password_hash
? Oui, vous pouvez utiliser du sel personnalisé dans la fonction password_hash
, mais cela n'est pas recommandé. Cette fonction génère automatiquement une valeur de sel aléatoire pour chaque mot de passe, qui est généralement plus sûr que le sel personnalisé. Si vous choisissez d'utiliser un sel personnalisé, ce devrait être une chaîne aléatoire d'au moins 22 caractères.
password_hash
Quels sont les paramètres de coût dans la fonction? password_hash
Les paramètres de coût de la fonction déterminent le coût de calcul du hachage. Des coûts plus élevés rendent le hachage plus sûr, mais aussi les calculs plus lents. Le coût par défaut est de 10, ce qui est un bon équilibre entre la sécurité et les performances pour la plupart des applications.
Vous pouvez utiliser la fonction password_needs_rehash
pour vérifier si le mot de passe de hachage doit être rétabli. Cette fonction reçoit le mot de passe de hachage, l'algorithme de hachage et le coût facultatif en entrée. Si le mot de passe de hachage est créé avec un algorithme ou un coût différent, il renvoie vrai, ce qui indique qu'il devrait être rétabli.
L'API de hachage de mot de passe PHP 5.5 est uniquement disponible en PHP 5.5 et plus tard. Cependant, il existe une bibliothèque de compatibilité qui fournit les mêmes fonctionnalités pour PHP 5.3.7 et plus tard.
PASSWORD_DEFAULT
puis l'algorithme par défaut change dans les versions futures de PHP? Si vous avez le mot de passe en utilisant la constante PASSWORD_DEFAULT
puis l'algorithme par défaut dans les versions futures de PHP change, la fonction password_hash
continuera de fonctionner comme prévu. Le mot de passe haché contient des informations sur l'algorithme utilisé, de sorte que la fonction password_verify
peut toujours vérifier correctement le mot de passe.
Oui, vous pouvez utiliser l'API de hachage de mot de passe PHP 5.5 avec des mots de passe non ASCII. Les fonctions password_hash
et password_verify
utilisent des données binaires, afin qu'elles puissent gérer les mots de passe pour n'importe quel caractère. Cependant, vous devez noter que différents systèmes peuvent gérer différemment les caractères non ASCII, c'est donc une bonne idée de les normaliser avant de hacher le mot de passe.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!