我已经使用 password_hash 创建了一个密码,如下所示:
$password = password_hash('password123', PASSWORD_DEFAULT);
这存储在 MySQL 数据库中的 varchar(60) 列中。
在我的登录表单中,我使用:
if(password_verify($password, $foundUser->Password){
/*login*/
}
哪里$password
是登录表单的明文输入,$foundUser->Password
是存储在数据库中的散列,但是 password_verify()
函数总是返回 false。
我已经使用以下代码检查了我的输入:
echo "Password: {$password} <br>";
echo "Found password: ".$foundUser->Password."<br>";
哪些输出:
Password: password123
Found password: $2y$10$8.ICQHCyCPzS.xygPO4cfuHsHZb6Kuxynn8/uUHOU1.7gY.UhSIXa
所以我有理由相信我正在输入正确的密码并从我的数据库中获取正确的哈希值。
我查看了 this question 中的链接寻求答案,但还没有让它发挥作用。有谁知道为什么 password_verify() 返回 false?
最佳答案
设置数据库列值大于 60,因为加密的密码字符可能超过 100 个。并且 $password = password_hash('password123', PASSWORD_DEFAULT);此函数返回每次都可能更改的加密密码。
关于php - password_verify() 在 php 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41978868/