Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File SHA-256或MD5用于文件完整性_File_Hash_Md5_Sha256 - Fatal编程技术网

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

File SHA-256或MD5用于文件完整性,file,hash,md5,sha256,File,Hash,Md5,Sha256,我知道在安全性等方面,SHA-256比MD5更受欢迎,但是,如果我要使用一种只检查文件完整性的方法(即,与密码加密等无关),那么使用SHA-256有什么好处吗 由于MD5是128位,而SHA-256是256位(因此是原来的两倍) 加密需要两倍的时间吗 如果时间不重要,比如在备份程序中,文件完整性是所有需要的,那么有人会反对MD5使用不同的算法,或者甚至建议使用不同的技术吗 使用MD5是否会产生校验和 至(1): 是的,在大多数CPU上,SHA-256的速度只有MD5的40%左右 至(2): 在这

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

由于MD5是128位,而SHA-256是256位(因此是原来的两倍)

  • 加密需要两倍的时间吗

  • 如果时间不重要,比如在备份程序中,文件完整性是所有需要的,那么有人会反对MD5使用不同的算法,或者甚至建议使用不同的技术吗

  • 使用MD5是否会产生校验和

  • 至(1): 是的,在大多数CPU上,SHA-256的速度只有MD5的40%左右

    至(2): 在这种情况下,我主张使用与MD5不同的算法。我当然更喜欢被认为是安全的算法。然而,这更多的是一种感觉。在这种情况下,可能需要构造而不是实际情况,例如,如果备份系统遇到基于MD5的证书受到攻击的示例,则在这种示例中,您可能有两个数据不同但MD5校验和相同的文件。对于其余的情况,这并不重要,因为MD5校验和只有在故意激发时才会发生冲突(不同数据的校验和相同)。 我不是各种哈希(校验和生成)算法的专家,所以我不能推荐其他算法。因此,这部分问题仍然悬而未决。 建议进一步阅读维基百科。在该页面的下一页还有一个加密哈希算法列表

    至(3):
    MD5是一种计算校验和的算法。使用此算法计算的校验和称为MD5校验和。

    SHA256和MDA5都是散列算法。它们获取您的输入数据(本例中为您的文件),并输出256/128位的数字。这个数字是校验和。由于无限多的输入可能会导致相同的哈希值,因此不会发生加密,尽管实际上冲突很少

    据统计,SHA256的计算时间比MD5稍长一些

    顺便说一下,我认为MD5可能适合您的需要

  • 不,它不那么快,但没那么慢
  • 对于备份程序,可能需要比MD5更快的速度
  • 总之,我想说,除了文件名之外,MD5是绝对安全的。SHA-256的速度会慢一些,而且因为它的尺寸而更难操作


    您也可以使用比MD5更不安全的东西,而不会出现任何问题。如果没有人试图攻击您的文件完整性,这也是安全的。

    技术上认可MD5比SHA256更快,因此仅验证文件完整性就足以提高性能

    您可以签出以下资源:


    底层MD5算法不再被认为是安全的,因此虽然md5sum非常适合在与安全无关的情况下识别已知文件,但如果文件有可能被故意和恶意篡改,则不应依赖它。在后一种情况下,强烈建议使用更新的哈希工具,如sha256sum

    因此,如果您只是想检查文件损坏或文件差异,那么当文件源受信任时,MD5就足够了。如果您希望验证来自不受信任源的文件的完整性,或者通过未加密连接来自受信任源的文件的完整性,MD5是不够的


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

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

    有专门设计的算法可以尽可能快地散列文件,以检查完整性和比较(
    杂音
    XXhash
    …)。显然,它们不是为安全而设计的,因为它们不满足安全哈希算法(即随机性)的要求,但对于大型消息,冲突率较低。如果您不追求安全性,而是追求速度,那么这些功能将使它们成为理想的选择

    此算法和比较的示例可以在以下优秀答案中找到:

    例如,我们在问答网站上使用
    murruld3
    对用户上传的图像进行散列,因此即使用户在多个答案中上传同一图像,我们也只存储一次

  • 是的,在大多数CPU上,SHA-256的速度是MD5的两到三倍,但这主要不是因为它的哈希较长。请参见此处的其他答案和的答案
  • 以下是MD5不适用的备份场景:
    • 备份程序对要备份的每个文件进行哈希运算。然后存储 每个文件的数据都按其哈希值排序,因此如果备份同一个文件 两次你只得到一份
    • 攻击者可以使系统备份他们控制的文件
    • 攻击者知道要从数据库中删除的文件的MD5哈希 备份
    • 然后,攻击者可以利用MD5的已知弱点设计新的 与要删除的文件具有相同哈希的文件。当该文件 备份后,它将替换要删除的文件,并且该文件已备份 数据将丢失
    • 这个备份系统可以加强一点(并提高效率) 通过不替换它以前遇到过的散列的文件,但是 然后,攻击者可以阻止具有已知散列的目标文件被删除 通过先发制人地备份一个特殊构造的伪造文件进行备份 具有相同哈希的文件
    • 显然,大多数系统(备份系统和其他系统)都不支持sa