Explication détaillée et meilleures pratiques pour le hachage du mot de passe PHP
Dans n'importe quel langage de programmation, il est crucial de comprendre comment hacher un mot de passe. Cet article expliquera rapidement comment implémenter le hachage des mots de passe en PHP et expliquer son importance.
Chaque programmeur PHP écrira des applications qui s'appuient sur la connexion de l'utilisateur pour s'exécuter correctement à un moment donné. Les noms d'utilisateur et les mots de passe sont généralement stockés dans une base de données puis utilisés pour l'authentification. Comme nous le savons tous, les mots de passe ne doivent jamais être stockés dans une base de données en texte brut: si la base de données est compromise, tous les mots de passe seront exploités par des attaquants malveillants. C'est pourquoi nous devons apprendre à hacher le mot de passe.
Notez que nous utilisons le mot "hachage" au lieu de "cryptage". En effet, le hachage et le cryptage sont deux processus complètement différents qui sont souvent confus.
La fonction de hachage prend une chaîne (comme MyPassword123) et la convertit en une version chiffrée de la chaîne, appelée valeur de hachage. Par exemple, le hachage de MyPassword123 pourrait être un nombre et une chaîne de lettres apparemment aléatoires, tels que 9C87BAA223F464954940F859BCF2E233. Le hachage est une fonction à sens unique. Une fois que vous avez quelque chose, vous obtenez une chaîne de longueur fixe - un processus difficile à inverser.
Nous pouvons comparer deux valeurs de hachage pour vérifier si elles proviennent toutes les deux de la même chaîne d'origine. Plus tard dans cet article, nous verrons comment implémenter ce processus à l'aide de PHP.
Similaire à un hachage, le cryptage prend une chaîne d'entrée et le convertit en un nombre apparemment aléatoire et une chaîne alphabétique. Cependant, le chiffrement est un processus réversible - si vous connaissez la clé de chiffrement. Parce qu'il s'agit d'un processus réversible, il ne convient pas aux mots de passe, mais est idéal pour des aspects tels que la messagerie sécurisée point à point.
Si nous cryptons le mot de passe au lieu du hachage, et que la base de données que nous utilisons est accessible par un tiers malveillant d'une manière ou d'une autre, alors tous les comptes d'utilisateurs seront menacés - ce n'est évidemment pas un bon scénario.
Le mot de passe doit également être "salé" avant le hachage. "Salt" est une opération qui ajoute une chaîne aléatoire au mot de passe avant le hachage.
En ajoutant du sel au mot de passe, nous pouvons empêcher les attaques du dictionnaire (l'attaquant entre systématiquement chaque mot dans le dictionnaire en tant que mot de passe) et les attaques de table arc-en-ciel (l'attaquant utilise une liste de hachages de mot de passe commun).
En plus d'ajouter du sel, nous devons également utiliser un algorithme relativement sûr lors du hachage. Cela signifie que ce devrait être un algorithme qui n'a pas encore été fissuré, de préférence un algorithme spécialisé plutôt qu'un algorithme général (comme SHA512).
En 2023, l'algorithme de hachage recommandé est:
Le traitement du hachage en PHP est devenu très facile depuis l'introduction de la fonction password_hash()
dans PHP 5.5.
Actuellement, il utilise BCrypt par défaut et prend en charge d'autres algorithmes de hachage tels que Argon2. La fonction password_hash()
ajoutera également automatiquement du sel à notre mot de passe.
fin, il renvoie le mot de passe haché. Le "coût" et le "sel" sont retournés dans le cadre du hachage.
En termes simples, le coût dans un hachage de mot de passe fait référence à la quantité de calcul requise pour générer un hachage. C'est comme mesurer la «difficulté» de la création d'un hachage. Plus le coût est élevé, plus la difficulté est élevée.
Imaginez que vous voulez faire un gâteau et la recette de ce gâteau dit "Battre l'œuf pendant cinq minutes". C'est le «coût» de la fabrication de ce gâteau. Si vous voulez rendre le gâteau plus "sûr", vous pourriez changer la recette pour "battre l'œuf pendant dix minutes". Il faut plus de temps pour faire un gâteau maintenant, ce qui est comme ajouter le «coût» de la fabrication d'un gâteau.
comme nous le lisons dans le document password_hash()
:
… Toutes les informations requises pour vérifier le hachage sont incluses. Cela permet à la fonction
password_verify()
de vérifier séparément le hachage sans avoir besoin de stocker des informations de sel ou d'algorithme.
Cela garantit que nous n'avons pas à stocker d'autres informations dans la base de données pour vérifier la valeur de hachage.
En fait, il ressemble à ceci:
<?php $password = "sitepoint"; $hashed_password = password_hash($password, PASSWORD_DEFAULT); if (password_verify($password, $hashed_password)) { //如果输入的密码与哈希密码匹配,则登录成功 } else { //重定向到主页 }
Pour plus d'informations sur les fonctions password_hash()
, veuillez visiter ici, et pour des informations sur les fonctions password_verify()
, veuillez visiter ici.
Pour les programmeurs PHP, il est important de comprendre la différence entre le hachage et le chiffrement et d'utiliser le hachage pour stocker les mots de passe pour protéger les comptes d'utilisateurs contre les attaques. La fonction password_hash()
introduite dans PHP 5.5 permet aux programmeurs d'avoir des mots de passe en toute sécurité à l'aide de divers algorithmes, y compris Argon2 et Bcrypt.
comme Tom Butler l'a dit dans PHP & MySQL: Novice to Ninja:
Heureusement, PHP comprend une méthode de hachage de mot de passe très sécurisée. Il est créé par des personnes qui connaissent ces aspects mieux que vous et moi, et cela évite que les développeurs comme nous qui ont besoin de comprendre pleinement les problèmes de sécurité qui peuvent survenir. Par conséquent, il est fortement recommandé que nous ayons des mots de passe de hachage en utilisant l'algorithme PHP intégré au lieu de créer le nôtre.
Assurez-vous de garder cela à l'esprit et de rester à jour avec les derniers algorithmes de hachage recommandés pour assurer la meilleure sécurité de votre application.
Qu'est-ce que le hachage du mot de passe et pourquoi est-il important en PHP? Le hachage du mot de passe est le processus de conversion d'un mot de passe en texte clair en une chaîne de caractères irréversible de longueur fixe. En PHP, il est important car il peut protéger les mots de passe des utilisateurs en les stockant sous forme de hachage, ce qui rend difficile pour les attaquants de récupérer le mot de passe d'origine.
Quels algorithmes de hachage dois-je utiliser pour hacher le mot de passe en php? PHP fournit des fonctions password_hash()
et password_verify()
, et l'algorithme BCrypt est utilisé par défaut. Bcrypt est recommandé car il s'agit d'une option de hachage de mot de passe sécurisé.
Comment hacher le mot de passe en php? Vous pouvez hacher le mot de passe à l'aide de la fonction password_hash()
. Par exemple: password_hash($password, PASSWORD_BCRYPT)
.
Comment vérifier le mot de passe du hachage en php? Pour vérifier le mot de passe de hachage, utilisez la fonction password_verify()
. Il vérifie si le mot de passe donné correspond à la version hachée stockée dans la base de données.
Lors du hachage en PHP, dois-je ajouter du sel au mot de passe? Oui, il est recommandé d'utiliser un sel unique pour chaque mot de passe avant le hachage. La fonction password_hash()
génère automatiquement du sel, vous n'avez donc pas besoin de le gérer manuellement.
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!