PHP hash_password函数

时间:2015-01-31 13:42:01

标签: php hash password-hash

基本上,我刚刚开始使用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.

如何获取它,以便当用户输入密码时,它会散列字符串并匹配数据库中的字符串,以便他们可以登录?我错过了什么

干杯

1 个答案:

答案 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' ;
}