password_verify未返回true

时间:2016-11-21 23:19:54

标签: php

我使用password_hash来加密用于插入数据库的密码。它正在工作,但当我使用password_verify验证它总是返回false时,即使加密值相同(检查数据库的值)

这是我的代码:

if ($_POST['submit']) {
    $dbh = new PDO("mysql:dbname=pass;host=localhost", "root", "");

    $select = $dbh->query("SELECT username, password FROM passwords WHERE username = " . $dbh->quote($_POST['username']));

    $fetch = $select->fetch(PDO::FETCH_ASSOC);

    if (password_verify($fetch['password'], password_hash($_POST['password'], PASSWORD_BCRYPT))) {
        echo 'Welcome! ' . $fetch['username'] . " your password is " . $fetch['password'];
    } else {
        echo "no";
    }
}

数据库中的加密密码是

  

$ 2Y $ 10 $ dMXgvPo5j9.8gaSqgtxTSevlFCsJwdSn8vdLbqFirUQcFvzfk0or2

我错过了什么吗?我在PHP(hash())中使用了不同的散列函数,所以我对为什么这不起作用感到困惑。插入的密码通过password_hash($password, PASSWORD_BCRYPT)

在数据库中加密

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

验证时,您无需重新密码。

password_verify($_POST['password'], $fetch['password']);

另外,你的订单错误。

答案 1 :(得分:1)

password_verify()的语法来自文档

  

boolean password_verify(string $ password,string $ hash)

这意味着只有2个参数,并且您的参数顺序错误。除此之外,$password字符串是未散列的变量。

只需将其更改为

即可
password_verify($_POST['password'], $fetch['password']);

参考