我正在使用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