基本上,我刚刚开始使用PHP,并试图掌握password_hash功能。当用户注册时,我使用以下方法对其密码进行哈希:
$hashed_password = password_hash($p, PASSWORD_DEFAULT);
然后,该散列密码存储在我的数据库中。然后我想检索登录密码。所以我的代码是这样编写的,一旦提交表单,电子邮件和密码字符串就会被清理,检查它们不是空白的,一旦完成,我将用户输入的密码,并使用以下方法对其进行哈希:
$hash = password_hash($password, PASSWORD_DEFAULT);
再一次。完成后,我连接到我的数据库,并尝试使用以下选择用户:
$q = "SELECT * FROM users
WHERE email='$email' AND password='$hash'";
然而。调试时我注意到用户输入了字符串,尽管与注册时输入的字符串相同,但是在散列时不同。所以我一直在回应$ hash并得到:
$2y$10$LQ55Q1DUqIgRx/2hgnbrnuQrYvrrBrq4WEFmV8TuxII6rDocaWzt2
但完全相同的字符串“password”存储在db中:
$2y$10$omNPA7cviUm.6asuhJIJ8Or.m9WeHhJMkCqYYijel5g.NflbdVnV.
如何获取它,以便当用户输入密码时,它会散列字符串并匹配数据库中的字符串,以便他们可以登录?我错过了什么
干杯
答案 0 :(得分:2)
你需要这样的东西:
$hashed_password = mysql_result(mysql_query("SELECT password FROM users WHERE email='$email'"));
$match = password_verify( $password, $hashed_password );
if($match){
echo 'Password is valid';
} else {
echo 'Password is not valid' ;
}