在PHP中的密码哈希问题 - password_verify()始终返回false
P粉481035232
2023-07-30 14:51:07
<p>我在PHP中遇到了密码哈希的问题。我在注册时使用password_hash()函数对管理员密码进行哈希处理,并将其存储在数据库中。然而,在登录时,当我尝试使用password_verify()验证密码时,它总是返回false,尽管我确定密码是正确的。</p><p>以下是我的代码摘要:</p><p><br /></p>
<pre class="brush:php;toolbar:false;">$adminPassword = "test123";
$adminPasswordHash = password_hash($adminPassword, PASSWORD_BCRYPT);
// ... Store $adminPasswordHash in the database ...
// During login:
$adminInputPassword = "test123";
$adminPasswordHashVERIFY = "$2y$10$o4qspRTirOSdyGtwHCxt6ee2i0BNChl3mEPazxVbmb534kw3ACHCm";
if (password_verify($adminInputPassword, $adminPasswordHashVERIFY)) {
echo "Password is correct!";
} else {
echo "Password is incorrect!";
}</pre>
<p>我确保$adminPassword和$adminInputPassword具有相同的值,但验证始终返回false。我还尝试使用password_hash()函数并将PASSWORD_DEFAULT作为参数,而不是PASSWORD_BCRYPT,但结果相同。</p><p>在哈希生成或验证过程中,我是否遗漏了什么?对于这个问题的任何帮助或见解将不胜感激。谢谢!</p><p><br /></p>
我找到了问题所在!问题似乎是由于在$adminPasswordHashVERIFY变量中使用双引号(")引起的。当使用双引号时,PHP会解释字符串并替换其中的变量。由于没有名为$fReIQ的变量,PHP将其视为未定义的变量,导致验证时产生错误的哈希值。
要解决这个问题,在$adminPasswordHashVERIFY变量中使用单引号(')引起哈希密码。这样可以确保哈希密码被视为普通字符串,而不是由PHP解释。
现在,如果你尝试以下代码,你将得到输出"密码正确!"。