1

据说PHP crypt 函数有这个返回值:

"Returns the hashed string or a string that is shorter than 13 characters and is 
guaranteed to differ from the salt on failure."

我不明白这意味着什么......我基本上已经理解了这个函数是如何工作的,但我想知道如何解释返回值并尝试理解这种情况何时发生......这是迄今为止比较模糊的一个PHP手册中的解释或者我只是因为长时间盯着它而失明......?:)

4

1 回答 1

2

crypt 文档提到的一件事:

(5.3.2) 修复了 Blowfish 在无效回合中的行为以返回“失败”字符串(“*0”或“*1”),而不是回退到 DES。

显然crypt可以在失败时返回不同的 [poorly-specified] 短字符串。我怀疑“或”位是为了解释“与盐不同”。

以这种方式,字符串“小于 13 个字符”(谁知道是什么)-> 失败。唯一记录在案的案例与无效的 Blowfish 选项有关,但将来可能会扩展。(虽然没有在文档中,但错误 #64449表明只要盐无效,就应该为算法返回“失败”。)


永远不会返回盐的原因可能错误 #55439相关:

如果 crypt() 使用 MD5 salts 执行,则返回值仅包含 salt。

结果是$valid = crypt($pw, $crypt);TRUE,对于任何 $pw。

因此,通过确保不返回盐本身,它避免了一个反馈循环,其中存储的哈希 - 只是由于错误而产生的盐 - 将始终注册为对任何密码有效。不返回盐的限制可能会减轻不同(已修补和未修补?)服务器的退化交互。


另外,有人知道如何找到特定 PHP 版本的点文档吗?看看何时添加“与盐不同”条款会很有趣..

于 2013-05-25T00:26:14.953 回答