我正在使用password_hash加密用于插入数据库的密码。这是工作,但是当我用password_verify
来验证它总是返回false,即使加密值相同(检查数据库的值)password_verify未返回true
这里是我的代码:
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)
任何帮助,将不胜感激。
的语法是'password_verify($非散列,$散列);' - 见[文档](HTTP ://php.net/manual/en/function.password-verify.php) - 所以对于你的特定代码,它会是'password_verify($ _ POST ['password'],$ fetch ['password']); ' – Qirel
$ _POST ['pa ssword']是非哈希的。 – user2101411
该手册说的字符串密码,int算法的password_hash()所以你想说什么? – user2101411