Maison  >  Article  >  développement back-end  >  Pourquoi la fonction Password_Verify() ne vérifie-t-elle pas les mots de passe hachés ?

Pourquoi la fonction Password_Verify() ne vérifie-t-elle pas les mots de passe hachés ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-21 07:07:301000parcourir

Why is the Password_Verify() Function Not Verifying Hashed Passwords?

PHP password_hash(), password_verify()

Dans votre script d'inscription, vous utilisez la fonction password_hash() de PHP pour crypter les mots de passe des utilisateurs et les stocker dans la base de données . Lorsque les utilisateurs tentent de se connecter, vous utilisez password_verify() pour comparer le mot de passe saisi avec la version hachée dans la base de données. Cependant, les mots de passe ne correspondent pas, ce qui indique un problème dans votre appel password_verify().

Utilisation de password_verify()

password_verify() prend deux paramètres :

  • $password : le mot de passe en texte brut saisi par l'utilisateur lors de la connexion.
  • $hash : le mot de passe haché stocké dans la base de données.

Il compare le mot de passe en texte brut avec la version hachée et renvoie vrai s'ils correspondent ou faux s'ils ne correspondent pas.

Votre problème de code

Dans votre script de connexion, vous nous transmettons le mot de passe en texte brut ($pwd) et le mot de passe haché ($password) à password_verify() :

if(($user_id == $p_num) && (password_verify($pwd, $password))){

Cependant, vous utilisez également var_dump() pour inspecter les variables pendant le comparaison, ce qui peut modifier leurs valeurs. La sortie var_dump() montre que le mot de passe en texte brut ($pwd) est modifié en "1", tandis que le mot de passe haché ($password) reste le même que celui stocké dans la base de données.

Utilisation correcte

Pour résoudre le problème, supprimez les appels var_dump() de votre code et assurez-vous que $pwd contient le mot de passe en texte brut saisi par l'utilisateur lors de la connexion. Votre code de connexion devrait ressembler à ceci :

if(($user_id == $p_num) && (password_verify($pwd, $password))){

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn