代码之家  ›  专栏  ›  技术社区  ›  user1121477

PHP hash_password函数

  •  1
  • user1121477  · 技术社区  · 10 年前

    基本上,我刚刚开始使用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”完全相同:

    $2y$10$omNPA7cviUm.6asuhJIJ8Or.m9WeHhJMkCqYYijel5g.NflbdVnV.
    

    我如何获取它,以便当用户输入密码时,它对字符串进行哈希并与数据库中的字符串匹配,以便他们可以登录?我错过了什么吗

    干杯

    1 回复  |  直到 10 年前
        1
  •  2
  •   Alex    10 年前

    你需要这样的东西:

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