长话短说,我有一些密码在 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)中验证这些格式错误的密码?
qq_花开花谢_0
沧海一幻觉
MM们