【问题标题】:Password Hashing issue with password_hash & password_verifypassword_hash 和 password_verify 的密码散列问题
【发布时间】:2026-02-14 22:45:02
【问题描述】:

我目前将我的服务器升级到 PHP 5.5,并希望充分利用 password_hashpassword_verify 的新功能。

我似乎无法正确验证哈希?我已经从 PHP 手册中复制了确切的示例,但它似乎仍然返回 false?

他们是我缺少的东西吗?

$hash = password_hash("rasmuslerdorf", PASSWORD_DEFAULT)."\n";


if (password_verify('rasmuslerdorf', $hash)) {
    echo 'Password is valid!';
} else {
echo 'Invalid password.';
}

返回

Invalid password.

【问题讨论】:

  • 这个问题似乎是题外话,因为它是本地化的和微不足道的。
  • @tereško 我不同意,保持开放。如果有人误读了文档,这可能是一个常见问题。琐碎的问题是关于主题的。
  • 这就是为什么你不只是盲目地复制/粘贴代码示例

标签: php passwords php-5.5 php-password-hash


【解决方案1】:

您将\n 附加到您的哈希,这会更改哈希:

$hash = password_hash("rasmuslerdorf", PASSWORD_DEFAULT)."\n";
                                                         ^^^^---here

消除它,它就会开始工作。

【讨论】:

  • 是的,就是这样!为什么他们会在示例中包含它?
  • 因为他们正在做一个echo,所以他们想要一个换行符来防止下一个文本输出与散列碰撞。
  • @MarcB 您认为 php.net 会在其关于使用数据库的手册中提到这一点。我在网上找不到任何关于此的内容。或者,我挖掘的不够深?即使它是为了回声,他们应该添加一个事实,即它向哈希添加了一个不可见的换行符,恕我直言,手册中应该包含该换行符。
【解决方案2】:

我认为问题在于您在末尾添加了一个带有 '\n' 的新行。

他们正在使用它在示例中的输出中添加换行符。

【讨论】:

  • 非常感谢!为什么他们会在示例中包含它?
  • @Trendee 因为他们是echoing 结果。
  • 啊,我明白了。谢谢!