在PHP中的密码哈希问题 - password_verify()始终返回false
P粉481035232
P粉481035232 2023-07-30 14:51:07
0
1
520
<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>
P粉481035232
P粉481035232

全部回复(1)
P粉099000044

我找到了问题所在!问题似乎是由于在$adminPasswordHashVERIFY变量中使用双引号(")引起的。当使用双引号时,PHP会解释字符串并替换其中的变量。由于没有名为$fReIQ的变量,PHP将其视为未定义的变量,导致验证时产生错误的哈希值。

要解决这个问题,在$adminPasswordHashVERIFY变量中使用单引号(')引起哈希密码。这样可以确保哈希密码被视为普通字符串,而不是由PHP解释。

现在,如果你尝试以下代码,你将得到输出"密码正确!"。


<?php
$adminPassword = "test123";
$adminPasswordHash = password_hash($adminPassword, PASSWORD_BCRYPT);

$adminInputPassword = "test123";
$adminPasswordHashVERIFY = 'y$o4qspRTirOSdyGtwHCxt6ee2i0BNChl3mEPazxVbmb534kw3ACHCm';

if (password_verify($adminInputPassword, $adminPasswordHashVERIFY)) {
    echo "Password is correct!";
} else {
    echo "Password is incorrect!";
}

?>
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板