搜索

首页  >  问答  >  正文

在PHP中的密码哈希问题 - password_verify()始终返回false

<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粉481035232P粉481035232513 天前525

全部回复(1)我来回复

  • P粉099000044

    P粉0990000442023-07-31 13:54:06

    我找到了问题所在!问题似乎是由于在$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!";
    }
    
    ?>

    回复
    0
  • 取消回复