长话短说,我得到了一些密码,这些密码在版本为PHP的PHP版本中被不正确地加盐和散列,如果盐无效,则crypt()函数可以使用CRYPT_STD_DES算法。
但是在PHP 5.3.2+中:
5.3.2修复了无效轮上的河豚行为,以返回“失败”字符串(“ * 0”或“ * 1”),而不是退回到DES。
导致此问题的原因是,该盐原本是河豚盐,但包含“ $”字符(但在不知不觉中畸形)。
因此,我无法手动执行以下操作:crypt($pass, "$a");
因为那现在不是有效的CRYPT_STD_DES盐。盐必须在“ ./0-9A-Za-z”范围内。它只是按照PHP开发人员的意图返回“ * 0”。
如何在PHP的最新版本(理想情况下至少为7.1)中验证这些格式错误的密码?
您可能正在寻找
password_hash ( string $password , int $algo [, array $options ] ) : string