【发布时间】:2013-04-06 06:30:15
【问题描述】:
假设我在 php 中使用 sha1 函数时是否发生哈希冲突。
这段代码会永久避免它还是我必须使用任何其他方式
$filename=sha1($filename.'|'.microtime());
OR
$filename=sha1($filename.'|'.rand());
如果没有,此代码不提供哈希冲突保护。
如果我假设 db 中可能有超过 100,000 个条目,我应该怎么做才能避免任何类型的哈希冲突。
【问题讨论】:
-
你可以生成一个更强的哈希php.net/manual/en/function.hash.php
-
我会使用 SHA-2 并假设哈希冲突永远不会发生。对于一个好的散列来说,为两个不同的输入返回相同值的机会可以忽略不计。
-
“如果地球上所有 65 亿人都在编程,那么每一秒,每个人都在生成相当于整个 Linux 内核历史(100 万个 Git 对象)的代码,并将其推入一个巨大的Git 存储库,需要 5 年时间才能使该存储库包含足够的对象,以使单个 SHA-1 对象发生冲突的概率为 50%。” (引自git book)