【问题标题】:As of 2011, what hash algo is the most suitable for message digest?截至 2011 年,哪种哈希算法最适合消息摘要?
【发布时间】:2011-03-18 21:28:27
【问题描述】:
当我在谷歌上搜索这个答案时,我有点矛盾,因为这些算法在不断改进,新的漏洞正在被发现,新的问题一直在出现......关于使用什么算法的很多建议只是旧的,或者保留旧时代的想法,当时它们是最好的方法。
我想在这里非常清楚:我不是在谈论密码。我说的是消息摘要,而不是加密哈希。
我可以继续使用 md5 作为我对消息摘要的第一个暗示(它的名字是正确的),但后来我记得那里的冲突比现代算法更多。但是,是什么让这些较新的算法更适合文件或短字符串的消息摘要?
这就是我的问题,应该使用什么现代消息摘要算法?
【问题讨论】:
标签:
hash
md5
digest
hash-collision
【解决方案1】:
从这个角度来看,根据您处理的数据量,SHA1 应该可以正常工作 - 如果您要处理大量数据,则 SHA-2 算法(例如 SHA-256)可能更适合作为由于其算法存在缺陷,SHA1 中对冲突的恐惧正在上升,但在处理少量数据时并不是非常严重。
MD5 已被证明太容易受到冲突的影响,因为使用 MD5 来创建伪造 SSL 证书的 SSL 证书受到攻击,所以我会远离那里。此外,根据您的应用程序,MD5 不符合 FIPS 140,如果这对您很重要的话。
SHA1 比 MD5 更理想,因为它更安全,因为 MD5 使用起来有风险,而且 SHA1 在大多数常见情况下比 SHA-2 具有更好的性能。 SHA-2 算法绝不慢 - 但它有优势。但是,SHA1 风险稍高,因为您可能已经将自己锁定在使用它 - 如果开始发现冲突,您可能很难更改,因此最好预先投资 SHA-2 算法。使用 SHA-256 而不是 SHA-1 的损失很小,这取决于您将如何使用 SHA 算法。 SHA-2 算法产生的输出比 SHA1 大得多,但有利于减少冲突的机会。
那么哪一个是正确的?这取决于您正在寻找什么以及您的用例。希望您现在可以做出决定。
【解决方案2】:
如有疑问,请使用SHA-256。其他 SHA-2 函数也很好;但是,SHA-384 和 SHA-512 在小型(仅限 32 位)平台上可能会遭受不可忽略的性能下降。这可能对某些特定应用很重要。
对于与安全无关的用途(例如,哈希表中的第一次索引,或检测意外的、非恶意的数据更改——您可以使用 CRC 的工作),请考虑 MD4 ,MD5的前身。 MD4 比 MD5 更糟糕,但实现起来更简单(代码更短)且速度更快(实际上,在某些 ARM 平台上,它被测量为比 CRC32 更快)。