4

当我用谷歌搜索这个答案时,我有点矛盾,因为这些算法在不断改进,新的漏洞正在被发现,新的问题一直在出现......关于使用什么算法的很多建议只是旧的,或者保留旧时代的想法,因为它们是最好的方法。

我想在这里非常清楚:我不是在谈论密码。我说的是消息摘要,而不是加密哈希。

我可以继续使用 md5 作为我对消息摘要的第一个暗示(它的名字是正确的),但后来我记得那里的冲突比更现代的算法更多。但是,是什么让这些较新的算法更适合文件或短字符串的消息摘要?

所以这就是我的问题,应该使用什么现代消息摘要算法?

4

2 回答 2

2

从这个角度来看,根据您使用的数据量,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 大得多的输出,但有利于减少冲突的机会。

那么哪一个是对的呢?这取决于您正在寻找什么以及您的用例。希望现在你可以做出决定。

于 2011-03-17T15:13:15.770 回答
2

如有疑问,请使用SHA-256。其他 SHA-2 函数也很好;但是,SHA-384 和 SHA-512 在小型(仅限 32 位)平台上可能会遭受不可忽略的性能下降。这对于某些特定的应用程序可能很重要。

对于与安全无关的用途(例如,哈希表中的第一次索引,或检测意外的、非恶意的数据更改——您可以使用CRC的工作),请考虑MD4,它是 MD5 的前身。MD4 比 MD5 更坏,但实现起来更简单(代码更短)并且速度更快(实际上,在某些 ARM 平台上,它被测量为比 CRC32 更快)。

于 2011-03-18T12:55:47.450 回答