【问题标题】:crypt() fallback for old hash salts in PHP7PHP7 中旧哈希盐的 crypt() 后备
【发布时间】:2018-08-19 23:18:11
【问题描述】:

我正在努力将我的代码库升级到 PHP-7,但我遇到了一些老用户的问题,他们的 salt 格式与 DES 不兼容。我的想法是对用户进行身份验证,然后将哈希盐转换为与新密码兼容的新格式,如 Blowfish。

当我尝试在旧盐中使用“crypt()”以便在更改盐之前对用户进行身份验证时,问题出现了,我收到以下错误:

crypt():提供的盐对 DES 无效。提供的可能错误 盐格式。

有没有办法将 crypt(或替代函数)与其他算法一起使用,以便我可以使用旧格式的 salt?

【问题讨论】:

  • 你试过password_hash吗? password_hash() 使用强哈希,生成强盐,并自动应用适当的轮次。 password_hash() 是一个简单的 crypt() 包装器,并且与现有的密码哈希兼容。鼓励使用 password_hash()。 不能完全确定它是否能解决您的问题,但与现有哈希兼容听起来很有希望。
  • 我最终使用了password_verify,它实际上类似于password_hash,但只返回真或假。然后在我将哈希重新转换为新格式之后。

标签: yii2 crypt php-7


【解决方案1】:

对于有同样问题的人,我使用password_verify 解决了它,实际上在下面使用password_hash,它支持现有的密码哈希,正如 Joachim 所建议的那样。

【讨论】:

    【解决方案2】:

    您需要记住一件事,password_verify 有一个特定的运行时间。如果您使用的是密码,强烈推荐。

    【讨论】: