Maison > Article > base de données > Puis-je décrypter les mots de passe hachés avec la fonction `password_hash()` de PHP ?
Déchiffrement des mots de passe en PHP : résoudre le casse-tête des mots de passe
Introduction
Le cryptage des mots de passe est crucial pour la protection des utilisateurs données. Cependant, décrypter les mots de passe cryptés peut s’avérer un dilemme. Cet article répond à la question fréquemment posée de savoir comment déchiffrer un hachage de mot de passe en PHP, à l'aide de la fonction password_hash().
Contexte
La fonction password_hash() en PHP implémente le bcrypt algorithme de hachage unidirectionnel. Les hachages Bcrypt sont conçus pour être coûteux en calcul pour les attaques par force brute. Cela signifie qu'il n'est pas pratique d'inverser le processus de hachage et de récupérer le mot de passe d'origine.
Question
Un développeur doit valider les mots de passe des utilisateurs par rapport aux mots de passe cryptés stockés dans une base de données. Les mots de passe ont été chiffrés à l'aide de la fonction password_hash(). Ils veulent savoir s'il existe un moyen de déchiffrer les mots de passe cryptés pour les comparer à la saisie de l'utilisateur.
Réponse
Le décryptage n'est pas possible avec les hachages bcrypt. Au lieu de cela, nous utilisons password_verify() pour vérifier si un mot de passe correspond à un hachage stocké :
<code class="php">if (password_verify($inputPassword, $hash)) { // Password is valid } else { // Invalid password }</code>
Dans votre cas spécifique, modifiez la requête SQL pour récupérer l'enregistrement utilisateur en fonction du nom d'utilisateur uniquement :
<code class="sql">$sql_script = 'SELECT * FROM USERS WHERE username=?';</code>
Ensuite, utilisez une technique similaire pour vérifier le mot de passe en PHP.
Considérations supplémentaires
Il est essentiel d'utiliser des requêtes paramétrées pour éviter les vulnérabilités d'injection SQL. Voici un exemple de paramétrage de la requête ci-dessus :
<code class="php">$stmt = $conn->prepare($sql_script); $stmt->bind_param('s', $username); $stmt->execute();</code>
En utilisant le paramétrage, vous vous protégez contre les entrées malveillantes qui pourraient nuire à votre base de données.
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!