Maison  >  Article  >  développement back-end  >  Pourquoi les fonctions password_hash() et password_verify() en PHP produisent-elles des résultats différents ?

Pourquoi les fonctions password_hash() et password_verify() en PHP produisent-elles des résultats différents ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-21 07:03:301035parcourir

Why Do password_hash() and password_verify() Functions in PHP Produce Different Results?

Différence de vérification du mot de passe dans les fonctions password_hash() et password_verify() de PHP

En PHP, les fonctions password_hash() et password_verify() sont couramment utilisé pour gérer et vérifier en toute sécurité les mots de passe des utilisateurs. Cependant, certains scénarios peuvent entraîner des divergences inattendues dans la correspondance des mots de passe.

Énoncé du problème

Vous avez observé une divergence dans la correspondance des mots de passe lors de l'utilisation de password_hash() pour chiffrer les mots de passe et password_verify() pour les vérifier. Vous avez remarqué que le résultat de password_verify() ne correspond pas au mot de passe non crypté d'origine.

Comprendre l'écart

L'écart se produit en raison de la nature des algorithmes de hachage . Le hachage consiste à convertir une entrée de texte brut en une sortie de longueur fixe (appelée hachage) unique et imprévisible. Ce processus est irréversible, ce qui signifie qu'il est informatiquement impossible de récupérer l'entrée d'origine du hachage.

Lorsque vous utilisez password_hash() pour crypter un mot de passe, il génère un hachage à l'aide d'un algorithme bcrypt. Ce hachage crypté est ensuite stocké dans la base de données. Lorsqu'un utilisateur tente de se connecter, le mot de passe fourni est à nouveau haché à l'aide de password_hash() et comparé au hachage stocké.

Résoudre l'écart

Pour garantir l'exactitude du mot de passe vérification, il est crucial d’utiliser le même algorithme et la même configuration que ceux utilisés lors du hachage initial du mot de passe. Voici les étapes à suivre :

  1. Vérifier l'algorithme et la configuration : Confirmez que l'algorithme utilisé dans password_hash() dans les scripts d'enregistrement et de connexion correspond à celui associé au mot de passe stocké. Par défaut, password_hash() utilise bcrypt, mais vous pouvez spécifier d'autres algorithmes en fournissant le facteur de coût approprié.
<code class="php">$password = password_hash($pwd, PASSWORD_DEFAULT); // Using default bcrypt algorithm</code>
  1. Paramètres de hachage cohérents : Si vous avez La personnalisation des paramètres de hachage, tels que le facteur de coût ou le sel, garantit leur cohérence dans les scripts d'enregistrement et de connexion. Toute variation de ces paramètres peut conduire à des hachages différents, même pour le même mot de passe d'entrée.
  2. Utilisez des comparaisons sécurisées : Lorsque vous utilisez password_verify() pour comparer des mots de passe, évitez d'utiliser des comparaisons d'égalité (== ou ===). Utilisez plutôt la fonction password_verify() spécialement conçue à cet effet, car elle peut gérer des attaques de timing qui pourraient potentiellement révéler des modèles de mot de passe.
<code class="php">if (password_verify($pwd, $password)) {
    // Password matches
}</code>
  1. Considérez les déclarations préparées : Pour éviter les attaques par injection SQL, pensez à utiliser des instructions préparées lors de l'interrogation de la base de données pour récupérer le mot de passe haché.

En suivant ces étapes, vous pouvez vous assurer que les fonctions password_hash() et password_verify() fonctionnent correctement, fournissant une gestion et une vérification fiables et sécurisées des mots 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!

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