Password_verify

Résolu/Fermé
parousky Messages postés 325 Date d'inscription mardi 11 septembre 2012 Statut Membre Dernière intervention 20 février 2022 - 30 déc. 2015 à 15:00
parousky Messages postés 325 Date d'inscription mardi 11 septembre 2012 Statut Membre Dernière intervention 20 février 2022 - 30 déc. 2015 à 17:23
Bonjour,
dans ma base de données, j'enregistre des mots de passe que j'ai hashé via password_hash().

Ensuite, pour la connexion, j'utilise password_verify() pour vérifier que le mot de passe entré par l'utilisateur correspond au hashage dans la base de données. Mais ça ne fonctionne pas, alors que le mot de passe correspond bien au hashage...

Voilà mon code :


$req = $bdd->prepare('SELECT Mail, Password FROM users WHERE Mail = ?');
$req->execute(array($_POST['mail']));
$donnees = $req->fetch();
$password = $donnees['Password'];




$verif = password_verify($_POST['password'], $password);


Dans ce code, password_verify doit vérifier que $_POST['password'] (qui n'est pas hashé) correspond au hashage $password (qui est hashé dans la base de données).

Et $verif vaut toujours false...

Y a-t-il quelque chose qui cloche dans mon code ?
Merci d'avance pour vos réponses !

4 réponses

parousky Messages postés 325 Date d'inscription mardi 11 septembre 2012 Statut Membre Dernière intervention 20 février 2022 6
30 déc. 2015 à 15:35
Non, je n'utilise que password_hash pour l'insertion, rien d'autre.

Par exemple, j'ai ça :
Non hashé : courgette

hashé : $2y$10$xsQhNpHOFGiz2.ceTSGRF.ApsowXA14gtMuySmgn62j...

(exatcement avec les 3 petits points, est ce que ça signifierait que la longueur max du Password enregistré dans ma bdd est inférieure à la taille du hash ?...)
2
parousky Messages postés 325 Date d'inscription mardi 11 septembre 2012 Statut Membre Dernière intervention 20 février 2022 6
30 déc. 2015 à 17:23
Oui effectivement, c'était bien ça !
J'ai changé pour l'algorithme crypt https://www.php.net/manual/fr/function.crypt.php
Ca fonctionne bien maintenant, merci pour ton aide !
2
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
Modifié par Pitet le 30/12/2015 à 15:09
Salut,

Ton code semble correct.

Concernant l'enregistrement du mot de passe hashé en bdd, tu n'utilises pas de fonctions telle que htmlentities ou addslashes (qui ne doivent pas être utilisée pour l'insertion en bdd) ?

Peux tu nous donner des valeurs d'exemples (password et hash) qui ne fonctionnerait pas ?

Bonne journée,
1
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
Modifié par Pitet le 30/12/2015 à 15:54
Effectivement la longueur de ton champ en bdd n'est pas suffisante.

L'algo par défaut utilisé par password_hash (BCRYPT) va retourner un hash de 60 caractères, or le tiens n'en comporte que 53.

Le conseil de la doc :
"Utilisation de l'algorithme bcrypt (par défaut depuis PHP 5.5.0). Notez que cette constante est concue pour changer dans le temps, au fur et à mesure que des algorithmes plus récents et plus forts sont ajoutés à PHP. Pour cette raison, la longueur du résultat issu de cet algorithme peut changer dans le temps, il est donc recommandé de stocker le résultat dans une colonne de la base de données qui peut contenir au moins 60 caractères (255 caractères peut être un très bon choix)."
http://php.net/manual/fr/function.password-hash.php
1