SHA-256或MD5用于文件完整性

我知道SHA-256在安全性等方面比MD5更受青睐,但是,如果我要用一种方法来检查文件的完整性(即与密码encryption无关),那么有没有什么好处使用SHA-256?

由于MD5是128位和SHA-256是256位(因此是两倍大)…

  1. 需要两倍的时间来encryption?

  2. 时间不是本质的,就像在备份程序中一样,文件的完整性是需要的,任何人都会反对MD5提出一个不同的algorithm,甚至build议一种不同的技术?

  3. 使用MD5产生校验和吗?

SHA256和MDA5都是哈希algorithm。 他们把你的input数据,在这种情况下,你的文件,并输出一个256/128位数字。 这个数字是一个校验和。 没有encryption发生,因为无限数量的input可以导致相同的哈希值,但实际上碰撞是罕见的。

根据这个答案 ,SHA256比MD5需要更多的时间来计算。

不客气,我会说MD5可能会适合你所需要的。

对于1):是的,在大多数CPU上,SHA-256只有MD5的40%。

2):在这种情况下,我会争论一个不同于MD5的algorithm。 我肯定会更喜欢一种被认为是安全的algorithm。 不过,这更是一种感觉。 如果你的备份系统遇到一个基于MD5的证书攻击的例子,你可能在这个例子中有两个文件有不同的数据,但是有相同的MD5校验和。 对于其余情况,这并不重要,因为MD5校验和实际上只有在故意激发时才会发生碰撞(=对于不同数据的校验和相同)。 我不是各种哈希(校验和生成)algorithm的专家,所以我不能build议另一种algorithm。 因此这部分问题仍然是开放的。 build议进一步阅读的是encryption哈希函数 -维基百科上的文件或数据标识符 。 另外在该页面上还有一个encryption散列algorithm的列表。

到3):MD5是一个计算校验和的algorithm。 然后使用这个algorithm计算出的校验和被称为MD5校验和。

  1. 不,它不那么快,但不是那么慢
  2. 对于备份程序,可能需要比MD5更快的速度

总而言之,除了文件名外,我还会说MD5是绝对安全的。 因为它的大小,SHA-256将会变得越来越难以处理。

你也可以使用比MD5更安全的东西,没有任何问题。 如果没有人试图破解你的文件的完整性,这也是安全的。

每个答案似乎都表明,你需要使用安全哈希来完成这项工作,但所有这些都被调整为缓慢,迫使暴力攻击者拥有大量的计算能力,根据您的需求,这可能不是最好的解决scheme。

有专门devise的algorithm尽可能快地散列文件来检查完整性和比较( murmurXXhash …)。 显然这些并不是为了安全而devise的,因为它们不符合安全散列algorithm(即随机性)的要求,但是对于大消息的冲突率较低。 如果您不是在寻找安全性而是速度,这个function使它们成为理想select。

这个algorithm和比较的例子可以在这个优秀的答案中find: 哪种哈希algorithm最适合独特性和速度? 。

举例来说,我们在问答网站上使用murmur3来散列用户上传的图片,所以即使用户上传同一张图片的时候,我们也只保存一次。

从技术上讲,MD5比SHA256更快,所以在validation文件完整性方面,性能就足够好了。

您可以结帐以下资源:

  • 通用encryptionalgorithm的速度比较
  • encryption散列函数的比较

底层的MD5algorithm不再被认为是安全的,因此虽然md5sum非常适合在与安全无关的情况下识别已知文件,但如果文件被有目的地和恶意地篡改,则不应该依赖md5sum。 在后一种情况下,强烈推荐使用sha256sum等较新的哈希工具。

所以,如果你只是想检查文件损坏或文件差异,当文件的来源是可信的,MD5应该是足够的。 如果您希望validation来自不可信来源的文件的完整性,或者通过未encryption的连接validation来自可信来源的文件的完整性,那么MD5是不够的。

另一位评论者指出,Ubuntu和其他人使用MD5校验和。 除了MD5之外,Ubuntu已经转向PGP和SHA256,但更强大的validation策略的文档更难find。 有关更多详细信息,请参阅HowToSHA256SUM页面 。