PHP hash_password 函数

PHP hash_password function

基本上,我刚刚开始使用 PHP,并试图掌握 password_hash 函数。当用户注册时,我使用以下方法对他们的密码进行哈希处理:

$hashed_password = password_hash($p, PASSWORD_DEFAULT); 

然后,该散列密码存储在我的数据库中。然后我想找回登录密码。所以我的代码是这样写的,一旦提交表单,电子邮件和密码字符串就会被清理,检查它们是否为空,完成后,我获取用户输入的密码,并使用以下方法对其进行哈希处理:

$hash = password_hash($password, PASSWORD_DEFAULT);

再来一次。完成后,我连接到我的数据库,并尝试 select 用户使用:

 $q = "SELECT * FROM users
                    WHERE email='$email' AND password='$hash'";

不过。调试时我注意到用户输入的字符串,尽管与注册时输入的字符串相同,但在散列时是不同的。所以我一直在回应 $hash 并得到:

y$LQ55Q1DUqIgRx/2hgnbrnuQrYvrrBrq4WEFmV8TuxII6rDocaWzt2 

但完全相同的字符串 "password" 在数据库中存储为:

y$omNPA7cviUm.6asuhJIJ8Or.m9WeHhJMkCqYYijel5g.NflbdVnV.

我如何获得它以便在用户输入密码时对字符串进行哈希处理并匹配数据库中的密码,以便他们可以登录?我是不是漏了什么

干杯

你需要这样的东西:

$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' ;
}