了解PHP crypt()返回值

时间:2013-05-25 00:02:28

标签: php hash crypt oneway

据说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手册中的错误解释,或者我只是因为长时间主演它而失明......? :)

1 个答案:

答案 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版本的点文档?看到添加“与盐不同”条款的时候会很有趣。