如何评估哈希冲突概率?

sha*_*oth 27 language-agnostic estimation md5 probability

我正在开发一个搜索系统的后端应用程序.搜索系统将文件复制到临时目录并为其提供随机名称.然后它将临时文件的名称传递给我的应用程序.我的应用程序必须在有限的时间内处理每个文件,否则它将被关闭 - 这是一种看门狗般的安全措施.处理文件可能需要很长时间,所以我需要设计能够处理这种情况的应用程序.如果我的应用程序在下次搜索系统想要索引同一文件时关闭,它可能会给它一个不同的临时名称.

显而易见的解决方案是在搜索系统和后端之间提供一个中间层.它会将请求排入后端并等待结果到达.如果请求在中间层超时 - 没问题,后端将继续工作,只有中间层重新启动,并且当搜索系统稍后重复请求时,它可以从后端检索结果.

问题是如何识别文件.他们的名字随机变化.我打算使用像MD5这样的哈希函数来散列文件内容.我很清楚生日悖论,并使用链接文章中的估计来计算概率.如果我假设我有不超过100 000个文件,那么具有相同MD5(128位)的两个文件的概率大约为1,47x10 -29.

我应该关心这种碰撞概率还是假设相等的散列值意味着相同的文件内容?

Sam*_*ron 40

等号哈希意味着相等的文件,除非有人恶意攻击您的文件并注入冲突.(如果他们从互联网上下载的话可能就是这种情况)如果是这种情况则选择基于SHA2的功能.

没有偶然的MD5碰撞,1,47x10 -29真的是非常小的数字.

为了克服重复大文件的问题,我将有一个3阶段的身份方案.

  1. 单独归档
  2. Filesize +文件中不同位置的64K*4散列
  3. 一个完整的哈希

因此,如果您看到具有新大小的文件,您肯定知道您没有重复.等等.

  • DB中已经有25K图像后,我第一次遇到MD5碰撞 (2认同)
  • “没有意外的 MD5 冲突”——这个说法是错误的。 (2认同)