密码匹配时password_verify()返回false

时间:2019-08-08 05:50:30

标签: php mysql

我正在创建一个用户可以登录的站点。当他们注册一个帐户时,我将哈希密码保存在数据库中。我正在尝试使用password_verify()来确认密码是否匹配,但是它返回false。

为确认它们是否匹配,我将打印出用户键入内容的哈希版本和存储在数据库中的哈希密码。 我知道一个常见的问题是数据库密码字段对于散列密码而言太小,但是我尝试将其设置为VARCHAR(256)和TEXT,以确保存储了整个散列密码。

if(isset($_POST['email'])){
     $email = strip_tags(mysqli_real_escape_string($conn, $_POST['email']));
     $password = strip_tags(mysqli_real_escape_string($conn, $_POST['passwd']));
     $sql = "SELECT email, passwd AS hashed_password FROM Accounts WHERE email = '$email'";

     $result = $conn->query($sql);
     $row = mysqli_fetch_array($result,MYSQLI_ASSOC);
     //print the hashed password that is stored in the database
     echo  'stored in the database: '. $row['hashed_password']. '<br>';
     $hash = hash('sha512', $password);
     //print the hashed version of what the user typed in
     echo 'hashed version of what your submitted: '. $hash. '<br>';
     if( password_verify($password, $hash)){
         echo "true";
     }
     else{
         echo 'false';
     }

我希望password_verify()返回true,但返回false

这是我当前输出的内容:

  

存储在数据库中:   1f40fc92da241694750979ee6cf582f2d5d7d28e18335de05abc54d0560e0f5302860c652bf08d560252aa5e74210546f369fbbbce8c12cfc7957b2652fe9a75

     

您提交的内容的散列版本:   1f40fc92da241694750979ee6cf582f2d5d7d28e18335de05abc54d0560e0f5302860c652bf08d560252aa5e74210546f369fbbbce8c12cfc7957b2652fe9a75

     

false

1 个答案:

答案 0 :(得分:0)

password_verify()与password_hash()函数一起使用;

更改:

$hash = hash('sha512', $password);

收件人:

$hash = password_hash($password, PASSWORD_DEFAULT);