我使用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)
任何帮助都将不胜感激。
答案 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']);
参考