据说PHP crypt function具有此返回值:
"Returns the hashed string or a string that is shorter than 13 characters and is
guaranteed to differ from the salt on failure."
我不明白这意味着什么......我基本上理解了这个函数是如何工作的,但我想知道如何解释返回值并尝试理解这种情况何时发生..这是迄今为止的一个PHP手册中的错误解释,或者我只是因为长时间主演它而失明......? :)
答案 0 :(得分:2)
crypt documentation提到的一件事:
(5.3.2)修复了无效回合中的Blowfish行为,返回“失败”字符串(“* 0”或“* 1”),而不是回退到DES。
显然crypt
可以在失败时返回不同的[指定不当]短字符串。我怀疑“或”位是为了“与盐不同”。
以这种方式,一个字符串“短于13个字符”(谁知道什么) - >失败。唯一记录的案例涉及无效的Blowfish选项,但可能在将来扩展。 (虽然不在文档中,bug #64449表示只要盐无效就应该为算法返回“失败”。)
盐永远不会返回的理由可以链接到bug #55439:
如果使用MD5盐执行crypt(),则返回值仅包含盐。
对于任何$ pw,结果是$valid = crypt($pw, $crypt);
为TRUE。
因此,通过确保盐本身不返回,它避免了一个反馈循环,其中存储的哈希 - 只是由于错误导致的盐 - 将始终注册为对任何密码有效。没有返回salt的限制可以减轻不同(修补和未修补的?)服务器的退化交互。
此外,任何人都知道如何找到特定PHP版本的点文档?看到添加“与盐不同”条款的时候会很有趣。