【问题标题】:PHP password_verify always returning falsePHP password_verify 总是返回 false
【发布时间】:2013-08-05 16:12:04
【问题描述】:

您好,我正在尝试使用 PHP 中的 password_hash() 对我的密码进行哈希处理。这部分很好,但是无论如何比较哈希都会返回 false。要登录,我检查用户帐户数据库并获取密码哈希,然后将其与输入的密码进行比较。我的代码如下所示:

$password = $_SERVER["PHP_AUTH_PW"];
$hash = $row["password"];
if (password_verify($password, $hash)) {
    // CREATE SESSION VARIABLES //
}
else{
     header("HTTP/1.1 404 Not Found");
}

如您所见,输入的密码被带入 HTTP 标头。我不认为这会弄乱密码字符串,因为我可以将它直接与数据库中的密码进行比较(没有散列)。有任何想法吗?我已经三次检查了我的 PHP 版本,我可以对密码进行哈希处理,所以不是这样。

【问题讨论】:

  • 您是否检查过您提供给password_verify 的参数是否符合您的预期?
  • 数据库中的密码已经用 password_hash() 函数进行了哈希处理。然后通过输入的用户名和输入的公司 ID 识别和抓取。然后使用 password_verify() 函数将输入的密码与散列密码进行比较。但是它总是返回 false
  • 不,我的意思是您是否手动检查并确保 $password$hash 的值是检索到的正确值,无论它们是否验证。
  • 是的,只是翻了一番检查,一切都很好
  • 我是否必须对输入的密码进行哈希处理并将其与存储在数据库中的哈希密码进行比较?我的理解是,每次你散列一个字符串时,它都会出现不同的结果,因此 password_verify() 函数。

标签: php login passwords basic-authentication


【解决方案1】:

所以 password_verify() 函数没有错。在 password_hash() 函数中添加了一点字符串。我从官方文档中复制并粘贴了这个函数:

echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT)."\n";

验证函数没有考虑末尾的 ."\n" 位。由于应对和粘贴,这只是在这里,所以一旦我删除它,它就很好。希望这对将来的其他人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    相关资源
    最近更新 更多