【问题标题】:password_verify() not working in phppassword_verify() 在 php 中不起作用
【发布时间】:2017-06-18 03:30:35
【问题描述】:

我已经使用 password_hash 创建了一个密码,如下所示:

$password = password_hash('password123', PASSWORD_DEFAULT);

这存储在 MySQL 数据库中的 varchar(60) 列中。

在我的登录表单中,我使用:

if(password_verify($password, $foundUser->Password){ /*login*/ }

其中$password 是来自登录表单的明文输入,$foundUser->Password 是存储在数据库中的哈希值,但 password_verify() 函数始终返回 false。

我已经使用以下代码检查了我的输入:

echo "Password: {$password} <br>"; echo "Found password: ".$foundUser->Password."<br>";

哪个输出:

Password: password123 Found password: $2y$10$8.ICQHCyCPzS.xygPO4cfuHsHZb6Kuxynn8/uUHOU1.7gY.UhSIXa

所以我有理由相信我输入了正确的密码并从我的数据库中获取了正确的哈希值。

我查看了this question 中的链接以获取答案,但还没有成功。有谁知道为什么 password_verify() 返回 false?

【问题讨论】:

  • 来自手册:“建议将结果存储在可以扩展超过 60 个字符的数据库列中(255 个字符是一个不错的选择)。”
  • 请注意,PASSWORD_DEFAULT 旨在随着 PHP 中添加新的和更强大的算法而随时间变化。因此,使用此标识符的结果长度可能会随时间而变化。因此,建议将结果存储在可以扩展超过 60 个字符的数据库列中(255 个字符将是一个不错的选择)。 – 仅作为初学者...您是否检查过从数据库中获得的值是和password_hash制作的一模一样吗?
  • ... 目前虽然PASSWORD_DEFAULT 使用 BCrypt 但不是,所以它应该始终是 60 个字符的字符串。
  • @Alvaro Gonzalez 和@deceze 我刚刚通过使用password_hash() 生成一个新的散列来测试这一点,并将它作为纯文本直接复制粘贴到数据库中。当我回显它时,它会打印出与password_hash() 生成的代码完全相同的代码。
  • 你展示的小代码有语法错误,所以你肯定已经删除了很多......我猜问题出在你没有展示的部分。

标签: php mysql passwords php-password-hash


【解决方案1】:

设置数据库列值大于 60,因为加密的密码字符可能超过 100 个。并且 $password = password_hash('password123', PASSWORD_DEFAULT);此函数返回加密的密码,每次都可能更改。

【讨论】:

    【解决方案2】:

    在 php 手册中对 password_hash() 函数有一个警告:使用 PASSWORD_BCRYPT 作为算法,将导致密码参数被截断为最大长度为 72 个字符。 请阅读此http://php.net/manual/en/function.password-hash.php

    也许您需要将 mysql 列从 varchar(60) 更改为 varchar(73) 或更大。您也可以使用类型文本。

    【讨论】:

    • password_hash() 函数会将密码截断为 72 个字符,但可以正常工作。对于 BCrypt 哈希 ('$2y$10$...),哈希仍然是 60 个字符。
    【解决方案3】:

    解决了我自己的问题。根据@martinstoeckli 和@Narf 的建议,我改变了调试它的方式,发现问题不在于password_verify(),而在于我处理输出的方式。抱歉跑来跑去,感谢您的帮助。

    【讨论】:

      猜你喜欢
      • 2018-02-27
      • 2022-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      • 1970-01-01
      • 2018-07-13
      • 2015-12-14
      相关资源
      最近更新 更多