Hash 用于数据完整性和重复数据消除的最佳哈希算法有哪些?

Hash 用于数据完整性和重复数据消除的最佳哈希算法有哪些?,hash,data-integrity,deduplication,Hash,Data Integrity,Deduplication,我正在尝试散列大量包含二进制数据的文件,以便: (1) 检查未来是否存在腐败,以及 (2) 消除重复文件(可能具有完全不同的名称和其他元数据) 我知道md5和sha1以及它们的亲属,但我的理解是,它们是为了安全而设计的,因此故意放慢速度,以降低暴力攻击的效果。相比之下,我希望算法运行得尽可能快,同时尽可能减少碰撞 有什么建议吗?MD5和SHA1不是为安全而设计的,不是,所以它们不是特别安全,因此也不是很慢。我自己(在Python中)也使用过MD5进行重复数据消除,性能还不错 今天的索赔机器可以计

我正在尝试散列大量包含二进制数据的文件,以便: (1) 检查未来是否存在腐败,以及 (2) 消除重复文件(可能具有完全不同的名称和其他元数据)

我知道md5和sha1以及它们的亲属,但我的理解是,它们是为了安全而设计的,因此故意放慢速度,以降低暴力攻击的效果。相比之下,我希望算法运行得尽可能快,同时尽可能减少碰撞


有什么建议吗?

MD5和SHA1不是为安全而设计的,不是,所以它们不是特别安全,因此也不是很慢。我自己(在Python中)也使用过MD5进行重复数据消除,性能还不错

今天的索赔机器可以计算每秒330MB数据的MD5散列


SHA-1是作为MD5的一个更安全的替代品开发的,当时发现您可以创建与MD5相同的散列值的输入,但我认为出于您的目的,MD5可以正常工作。对我来说确实是这样。

你是最正确的。如果您的系统没有任何对手,那么使用加密散列函数在其安全属性方面就太过分了


冲突取决于哈希函数的位数b和估计要计算的哈希值的位数N。学术文献认为这种冲突概率必须低于硬件错误概率,因此与逐字节比较数据[,,,,]相比,与哈希函数发生冲突的可能性更小。硬件错误概率在2^-12和2^-15[]之间。如果您希望生成N=2^q散列值,那么您的冲突概率可能由该等式给出,该等式已经考虑了:

哈希函数的位数与其计算复杂度成正比。因此,您感兴趣的是找到具有尽可能最小位的哈希函数,同时能够将冲突概率保持在可接受的值


下面是一个如何进行分析的示例:

  • 假设您有f=2^15个文件
  • 每个文件lf的平均大小为2^20字节
  • 您假装将每个文件分成平均大小为2^10字节的块lc
  • 每个文件将被分成c=lf/lc=2^10个块

  • 然后将散列q=f*c=2^25个对象

根据该方程,几种散列大小的冲突概率如下:

  • P(散列=64位)=2^(2*25-64+1)=2^-13(小于2^-12)
  • P(散列=128位)=2^(2*25-128+1)2^-77(远小于2^-12)
现在,您只需要决定将使用哪种64位或128位的非加密哈希函数,知道64位非常接近硬件错误概率(但会更快),128位是更安全的选择(尽管较慢)


下面你可以找到一个从维基百科中删除的非加密散列函数的小列表。我知道Hash3,它比任何加密哈希函数都快:

  • :32、64、128、256、512和1024位
  • :64和128位
  • :32、64、128和160位
  • :64、128和256位

  • 如果您不关心安全性,您可以使用其中一个安全哈希函数并减少轮数。这使得加密不可靠,但仍然适合于平等性测试

    斯金很强壮。它有80发子弹。尽量减少到10左右


    或者使用AES和XOR对输出块进行加密。AES是在现代CPU上进行硬件加速的,速度快得惊人。

    MD5和SHA1是加密哈希函数,因此设计用于安全目的。仅仅因为他们的安全性受到了威胁(SHA1还没有那么严重),并不意味着他们不是为安全而设计的。(SHA1没有那么严重的危害)*首先,感谢你花时间解释这一点;我真的很感激。第二,我想问一个澄清的问题:如何以不同的方式防御对手和大量文件?最终的结果不是一样的吗:生成足够多的数据,最终找到两个散列相同的数据段?(随机或通过有针对性的算法分析。)