【发布时间】:2020-08-29 01:42:47
【问题描述】:
长话短说,我有一些密码在 PHP 版本中未正确加盐和散列,如果加盐无效,则允许 crypt() 函数回退到 CRYPT_STD_DES 算法。
但是在 PHP 5.3.2+ 中:
5.3.2 修复了 Blowfish 在无效回合中的行为以返回“失败”字符串(“*0”或“*1”),而不是回退到 DES。
造成这个问题的原因是盐包含“$”字符,因为它原本是河豚盐(但在不知不觉中格式错误)。
因此,我无法手动执行以下操作:
crypt($pass, "$a");
因为那现在也不是有效的 CRYPT_STD_DES 盐。盐必须在“./0-9A-Za-z”范围内。它只是按照 PHP 开发人员的意图返回“*0”。
如何在更新的 PHP 版本(至少 7.1,理想情况下)中验证这些格式错误的密码?
【问题讨论】:
-
如果创建了 DES 哈希,它包含什么盐,它真的包含 $ 字符吗?你能显示这样一个 DES 哈希字符串的第一部分吗?
-
@martinstoeckli 在这种情况下盐是“$2”。哈希的开头(例如)将是“$281kuD”加上另外 6 个字符。
标签: php hash passwords salt crypt