【发布时间】:2021-12-11 08:34:38
【问题描述】:
SHA-1 被认为比 MD5 更安全,至少有两个原因:更大的哈希(160 位与 128 位)和更好的哈希函数。
我需要在几百万个字符串上生成散列。通常,即使对于 MD5,发生碰撞的可能性也应该非常低。我知道 MD5 已经很老了,通常不被认为是安全的,但在我的情况下,故意攻击不是问题(没有外部访问,没有激励等)。我只需要一个相当安全的散列函数,不会浪费太多位,128 位应该绰绰有余。所以我想知道 - 如果我只得到 SHA-1 哈希的前 128 位,那会比 MD5 的 128 位更好吗? “更好”是指“不太可能导致碰撞”。
【问题讨论】:
-
如果 MD5 对于您的特定用例来说“足够好” - 去吧!如果您负担得起使用 SHA-1(160 位)或 SHA-256:太好了!但是截断你的 SHA-1 哈希?可能不是一个好主意。看这里:stackoverflow.com/a/4784437/421195 或这里:Project HashClash
-
不,对于非安全哈希表/映射应用程序,SHA1 截断为 128 位并不比 MD5 好,或者就此而言 MD4。对于该应用程序,它们都是核杀伤力过大的。另一方面,如果哈希泛洪攻击是一种可能性,SipHash 是值得研究的。