Page 1 sur 1

Compatibilité password_verify() et requete SQL

Posté : 12 juil. 2014, 18:43
par Codeurdudimanche
Bonjour tout le monde =D

J'essaie de faire un espace membre à un site, avec l'habituelle trip des mots de passe et tout le tralala. Je souhaite crypter un peu tout ca.
Donc j'ai un formulaire d'inscription qui marche parfaitement et qui hash les mots de passe avec la fonction password_hash() :

Code : Tout sélectionner

$password=password_hash($_POST['mdp'], PASSWORD_DEFAULT)."\n";
Là pas de souci, pour vérifier je veux utiliser par conséquent password_verify(),
alors quand je fais un truc du genre ca, ca marche :

Code : Tout sélectionner

if (password_verify('hhh', '$2y$10$I7L0GovZEaHKUO5UMMj9m.GD8KbzATRmv4Dg0ZixfQlhwdYiGHcLm')){ print 'oui'; } else { print 'non'; }
Avec comme mot de passe 'hhh' et le hash qui va bien il me sort oui, pas de souci, maintenant je cherche le hash dans la base de donnée :

Code : Tout sélectionner

// Connect to database server $mysqli= new mysqli("serveur", "id", "mdp", "mabd"); /* Vérification de la connexion */ if ($mysqli->connect_errno) { printf("Échec de la connexion : %s\n", $mysqli->connect_error); exit(); } $response = "SELECT password FROM user WHERE login = 'hhh'"; $res=mysqli_query($mysqli,$response); $re=mysqli_fetch_assoc($res)['password']; if (password_verify('hhh', $r)){ print 'oui'; } else { print 'non'; }
Dans ce cas il me sort "non", même si quand je print $re c'est le bon hashé qui sort, même si je settype ou strval en chaine de caractère. J'ai aucune idée comment régler ce problème ou où chercher des solutions.

Merci d'avance pour votre temps !
Bonne soirée !

Re: Compatibilité password_verify() et requete SQL

Posté : 12 juil. 2014, 18:45
par Codeurdudimanche
évidemment l'erreur n'est pas là :

Code : Tout sélectionner

if (password_verify('hhh', $rE)){
Excusez moi pour cette coquille :)

Re: Compatibilité password_verify() et requete SQL

Posté : 12 juil. 2014, 20:09
par Elie
Si tu fais print_r($re);
Tu as bien le mot de passe ?

Apres personnellement utilise plutot MD5 pour crypter tes mots de passe car contretement a ta fonction MD5 ne peut pas être decrypter .. Donc tu compares si les 2 encryptations sont identiques.

Re: Compatibilité password_verify() et requete SQL

Posté : 13 juil. 2014, 11:40
par Codeurdudimanche
Merci de ta réponse.

Si je printr c'est le bon hashé qui sort, c'est pour ca que je ne comprend pas ><

Re: Compatibilité password_verify() et requete SQL

Posté : 13 juil. 2014, 12:09
par Elie
Si je fais ca forcement ca marche :
$re = password_hash('test', PASSWORD_DEFAULT);
echo password_verify('test', $re) ? 'Oui' : 'Non';
Fait en sorte de débuggé ton code en mettant des echo un peu partout ...
<?php

   // Connect to database server
   $mysqli= new mysqli("serveur", "id", "mdp", "mabd");
   if ($mysqli->connect_errno) {
       printf("Échec de la connexion : %s\n", $mysqli->connect_error);
       exit();
   }
   
	$sql = "SELECT `password` FROM `user` WHERE `login` = 'hhh'";
	$req = mysqli_query($mysqli, $sql);
	$row = mysqli_fetch_row($req);
	
	echo 'Le password crypté = '.password_hash('hhh', PASSWORD_DEFAULT).'<br />';
	echo 'Le password dans la base de données est : '.$row['password'].'<br />';
	echo password_verify('hhh', $row['password']) ? 'Ca marche' : 'Ca marche pas';
	

?>

Re: Compatibilité password_verify() et requete SQL

Posté : 13 juil. 2014, 16:40
par Codeurdudimanche
J'ai réussi à le faire marcher !
En faite, $re contenait un espace à la fin...pourquoi ? je sais pas. il suffit de l'enlever et ca marche !

Code : Tout sélectionner

$response = "SELECT password FROM freelance_user WHERE login = 'hhh'"; $res=mysqli_query($mysqli,$response); $re=mysqli_fetch_assoc($res)['password']; $o=substr($re,0,-1); //on enlève l'espace à la fin print_r($o); if (password_verify('hhh',$o)){ print 'oui'; } else { print 'non'; }
En tout cas merci pour tout :D

Re: Compatibilité password_verify() et requete SQL

Posté : 13 juil. 2014, 16:43
par Elie
Utilise trim() mais faut que tu comprennes d'où vient l'espace car la c'est bric-à-brac...