23

我想知道 adler32 校验和与 md5 校验和相比有多可靠?维基百科上告诉我们,adler32 比 md5“更不可靠”,所以我想知道多少,以及以何种方式?

更具体地说,我想知道它是否足够可靠,可以作为长期存档 20GB+ (tar)文件的一致性检查?

4

5 回答 5

18

有关 Adler-32 校验和的错误检查功能的详细信息,请参见重新访问Fletcher 和 Adler 校验和。马克西诺,2006。

本文包含对这两个校验和提供的汉明距离的分析,并提供了高达约 2^11 位的数据字的残余错误率的指示。这显然远低于您对 2^38 位的要求......

于 2011-05-18T11:43:54.300 回答
15

Adler32 的用途与 MD5 完全不同。Adler32 是一个校验和。MD5 是安全消息摘要。Adler32 用于快速哈希,位空间小,算法简单。它的碰撞率很低,但还不足以保证安全。MD5、SHA 和其他加密/安全哈希(或消息摘要)具有更大的位空间和更复杂的算法,因此冲突更少。例如,比较 SHA2-256;256 位与 Adler32 微不足道的 32 位相比。

Adler确实有它的用途,例如在哈希表中,或者在快速数据完整性检查中。尽管如此,它的设计目的与 MD5 或其他安全摘要不同。

顺便说一句,如果您需要一个简单但有点可靠的校验和,那么 Fletcher 的表现似乎胜过 Adler。我推测它们都优于 CRC,尽管可能不是基于简单加法的校验和(尽管它很容易发生冲突)。如果您既想要性能又想要安全性,请同时使用这两种算法。将校验和算法用作快速计算和查找,然后使用较大的摘要进行更彻底的确认(如果找到)。

为了回答您关于确保档案有效性的问题,我想说这可能就足够了。最好的选择?可疑的。错误的可能性?非常低。

于 2012-09-23T10:43:03.710 回答
4

这是一个古老的算法;正如维基百科页面所说,“以准确性换取速度”。简而言之,,你不应该依赖它。

关键是,在多次损坏的情况下,此校验和可能仍会“正常”通过。由于雪崩效应,这在现代算法(甚至是旧的 MD5)中发生的可能性要小得多。

对于今天的机器,速度并不是一个问题,因此我建议使用现代算法(以当前为准),即使是 TB 范围内的文件。使用旧校验和系统节省的时间微不足道,恕我直言,这不足以平衡未检测到的数据损坏的显着增加的风险——老实说,如今,20GB 的文件并不是你需要使用的数据多弱我敢说坏了)算法。

于 2011-05-18T11:19:20.117 回答
3

它不如 MD5 或 CRC 可靠(实际上与 CRC 大致相同)。优势是速度,劣势更多地表现在短数据(几百字节)上——意思是散列值的分布不能很好地覆盖可用的 32 位输出。对于大文件,这是一个不错的选择。

于 2011-05-18T11:18:14.617 回答
2

Adler-32 和 MD5 无法以这种方式进行比较。当您想要确保文件没有被对手篡改时,MD5 实际上是一种加密校验和,而 Adler-32(以及与 Adler-32相当的 CRC )旨在确保文件未被意外篡改(完整性校验和。)

MD5 实际上因其加密目的而被认为是损坏的,并且现在仅当您需要更多位以确定性时才可用作完整性检查。Adler-32 可能“不太可靠”的唯一方法是它允许在保持相同输出的同时更改潜在的更多位,这意味着有更多的碰撞空间。

这个链接很好地讨论了使用 Adler-32 如何为某些需要使用加密和来增加确定性的代码提供性能优势。也就是说,您可以使用更小更便宜的校验和来查看在更改文件的情况下是否值得考虑使用更昂贵的 MD5/SHA/Whirlpool。

于 2013-10-23T16:38:38.943 回答