当用户注册并登录时,我使用相同的password_hash函数对纯文本密码进行散列。
password_hash($password, PASSWORD_DEFAULT)
但是密码不同。
我可以用另一种方式证明这一点,只需用相同的密码注册两个用户。
例如,"admin"变为"$2y$10$SyqILazLbo4jJVYvxYfwW.WgHUnSi.cRMETWoMjZXwMNa4H4tYELK"
在一个用户上为"$2y$10$gXfVz6oH4afxAL.7ytFJseZV3VERxbSYXqN7FYsRzH4IrjJw9uyO6"。这意味着password_hash将永远不会相同,因此用户永远无法登录
我做错了什么?
您需要使用password_verify
来验证密码是否正确。像这样的
<?php
$password = "rasmuslerdorf";
$hash = password_hash($password, PASSWORD_DEFAULT);
if (password_verify($password, $hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
?>
参考页面
您需要使用函数password_verify($user_submitted_password, $hash_in_db)
来检查结果。password_hash()
在每个哈希中嵌入一个随机salt,这就是为什么密钥不同,但它会正确验证。
参见password_verify()
文档中的示例
<?php
// See the password_hash() example to see where this came from.
$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';
if (password_verify('rasmuslerdorf', $hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
?>