我想知道adler32校验和是多么可靠,与例如md5校验和?在维基百科上告诉我,adler32“比md5”更“可靠”,所以我想知道它有多少,以及以哪种方式?
更具体地说,我想知道它是否足够可靠作为长期存档大小为20GB +的(tar)文件的一致性检查?
答案 0 :(得分:16)
有关Adler-32校验和的错误检查功能的详细信息,请参阅示例Revisiting Fletcher and Adler Checksums. Maxino, 2006.
本文包含对这两个校验和提供的汉明距离的分析,并提供了高达约2 ^ 11位的数据字的残留错误率的指示。这显然远远低于你对2 ^ 38位的要求......
答案 1 :(得分:11)
Adler32与MD5的目的完全不同。 Adler32是校验和。 MD5是一个安全的消息摘要。 Adler32用于快速哈希,具有小位空间和简单算法。它的碰撞率很低,但不足以保证安全。 MD5,SHA和其他加密/安全哈希(或消息摘要)具有更大的位空间和更复杂的算法,因此具有更少的冲突。比较SHA2-256,例如;与Adler32的32位相比,256位。
Adler 确实的目的,例如哈希表或快速数据完整性检查。尽管如此,它的设计目的与MD5或其他安全摘要的目的不同。
顺便说一句,如果你需要一个简单但有些可靠的校验和,那么Fletcher似乎胜过阿德勒。我推测它们都优于CRC,但可能不是简单的基于加法的校验和(尽管它很容易发生冲突)。如果您想要两种性能和安全性,那么请使用BOTH算法。将校验和算法用作快速计算和查找,然后使用更大的摘要进行更彻底的确认(如果找到)。为了回答你关于确保档案有效性的问题,我想说它可能就足够了。最好的选择?可疑的。错误的可能性?非常低。
答案 2 :(得分:4)
这是古代算法;正如维基百科页面所说的那样,“交易速度的准确性”。简而言之, no ,你不应该依赖它。
关键在于多次损坏,此校验和可能仍然传递为“okay”。由于雪崩效应,现代算法(即使是旧的MD5)也不太可能发生这种情况。
对于今天的机器来说,速度并不是一个值得关注的因素,因此我建议使用现代算法(以当前为准),即使对于TB范围内的文件也是如此。使用旧的校验和系统可以节省大量时间,恕我直言不足以平衡未检测到的数据损坏风险显着增加 - 说实话,20GB的文件不是那么多这些天你的数据我需要使用弱(我敢于破坏)算法。
答案 3 :(得分:2)
Adler-32和MD5无法以这种方式进行比较。当你想确保一个文件没有被攻击者篡改时,MD5实际上是一个加密校验和,而Adler-32(以及CRC,是< / em>与Adler-32相当)用于确保文件未被意外篡改(完整性校验和)。
实际上,MD5因其加密目的而被视为已损坏,并且仅在您需要更多位确定性时才用作完整性检查。 Adler-32可能“不太可靠”的唯一方法是它允许在保留相同输出的同时更改可能更多的位,这意味着存在更多的冲突空间。
This link就如何使用Adler-32为某些类型的代码提供性能优势进行了很好的讨论,这些代码需要使用加密和来增加确定性。也就是说,您可以使用较小且便宜的校验和来查看在更改文件时是否值得考虑使用更昂贵的MD5 / SHA / Whirlpool。
答案 4 :(得分:1)
它不如说MD5或CRC(实际上与CRC大致相同)。优点是速度,缺点是更多显示短数据(几百字节) - 意思是哈希值的分布不能很好地覆盖可用的32位输出。对于大文件,这是一个不错的选择。