我知道SHA-256在安全性等方面比MD5更受青睐,但是,如果我要使用一种仅检查文件完整性的方法(也就是说,与密码加密无关),是否有任何优势?使用SHA-256?
由于MD5是128位,而SHA-256是256位(因此是原来的两倍)...
加密最多需要两倍的时间吗?
如果时间不是紧要的(例如在备份程序中),并且只需要文件完整性,那么有人会反对MD5提出不同的算法,甚至提出不同的技术吗?
使用MD5是否会产生校验和?
我知道SHA-256在安全性等方面比MD5更受青睐,但是,如果我要使用一种仅检查文件完整性的方法(也就是说,与密码加密无关),是否有任何优势?使用SHA-256?
由于MD5是128位,而SHA-256是256位(因此是原来的两倍)...
加密最多需要两倍的时间吗?
如果时间不是紧要的(例如在备份程序中),并且只需要文件完整性,那么有人会反对MD5提出不同的算法,甚至提出不同的技术吗?
使用MD5是否会产生校验和?
Answers:
SHA256和MDA5都是哈希算法。他们获取您的输入数据(在本例中为文件),并输出256/128位数字。该数字是校验和。没有加密发生是因为无限数量的输入会导致相同的哈希值,尽管实际上冲突很少发生。
根据此答案,SHA256的计算时间要比MD5多一些。
随便说一句,我想说MD5可能适合您的需求。
到1):是的,在大多数CPU上,SHA-256的速度仅为MD5的40%。
到2):在这种情况下,我主张使用不同于MD5的算法。我绝对希望使用一种被认为是安全的算法。但是,这更是一种感觉。在这种情况下构建的情况不是实际的,而是实际的,例如,如果您的备份系统遇到攻击基于MD5的证书的示例,那么在此示例中,您可能会有两个文件,它们具有不同的数据,但MD5校验和相同。在其余情况下,这并不重要,因为MD5校验和实际上只有在故意引起的情况下才会发生冲突(=不同数据的校验和相同)。我不是各种哈希(校验和生成)算法的专家,所以我不能建议其他算法。因此,这部分问题仍然是未解决的。建议进一步阅读加密哈希函数-Wikipedia上的文件或数据标识符。在该页面的下方,还有一系列加密哈希算法。
到3):MD5是一种计算校验和的算法。然后,将使用此算法计算出的校验和称为MD5校验和。
每个答案似乎都暗示您需要使用安全哈希来完成这项工作,但是所有这些调整都太慢了,以迫使蛮力攻击者拥有大量计算能力,根据您的需求,这可能不是最佳解决方案。
有一些专门设计的算法可以尽可能快地对文件进行哈希处理,以检查完整性和比较性(murmur
,XXhash
...)。显然,它们不是出于安全性目的而设计的,因为它们不满足安全哈希算法(即随机性)的要求,但对于大型邮件的冲突率较低。如果您不追求安全性而是追求速度,那么此功能使其成为理想选择。
可以在以下出色答案中找到该算法的示例和比较结果:哪种哈希算法最适合唯一性和速度?。
例如,我们在Q&A网站上murmur3
对用户上传的图像进行哈希处理,因此即使用户在多个答案中上传同一图像,我们也只会存储一次。
总而言之,我想说MD5除了文件名之外绝对是安全的。由于SHA-256的大小,它只会变得更慢,更难处理。
您也可以使用没有MD5安全性的东西,而不会出现任何问题。如果没有人试图破坏您的文件完整性,这也是安全的。
底层的MD5算法不再被认为是安全的,因此,尽管md5sum非常适合在与安全无关的情况下识别已知文件,但是如果有可能文件被故意和恶意篡改,则不应依赖md5sum。在后一种情况下,强烈建议使用更新的哈希工具,例如sha256sum。
因此,如果您只是想检查文件是否损坏或文件差异,那么当文件源受信任时,MD5应该足够了。如果您要验证来自不受信任源或来自未经加密连接的受信任源的文件的完整性,则MD5不够。
另一位评论者指出,Ubuntu和其他人使用MD5校验和。除了MD5之外,Ubuntu还迁移到了PGP和SHA256,但是更难找到更强大的验证策略的文档。有关更多详细信息,请参见HowToSHA256SUM页面。
哈希快乐!