如何发现相同的文件而不将它们相互比较?

Mat*_*nco 3 statistics comparison file unique hash-collision

我正在建立一个用户可以上传内容的网站.一如既往,我的目标是世界优势,所以我想避免两次存储相同的文件.例如,如果用户尝试两次上传相同的文件(通过重命名或仅仅忘记她过去所做的事情).

我目前的方法是让跟踪每个上传文件的数据库存储有关每个文件的以下信息:

  • 文件大小(字节)
  • MD5文件内容的总和
  • SHA1文件内容的总和

然后是这三列的唯一索引.使用两个哈希值可以最大限度地降低误报的风险.

所以,我的问题是:两个相同大小的不同("真实世界")文件具有相同的MD5 SHA1哈希值的概率是多少?

或者:是否存在类似(非)复杂性的更智能方法?

(我知道概率可能取决于文件大小).

谢谢!

Fre*_*Foo 6

出于所有实际目的,具有相同SHA1散列的两个相同大小的真实文件的概率为零.已发现SHA1中的一些弱点,但是从SHA1散列和大小(1)创建文件在计算能力方面非常昂贵,并且(2)产生垃圾或原始文件.

将MD5添加到混音中是完全矫枉过正的.如果您不信任SHA-1,那么更好的选择是切换到SHA-2.

如果您真的很偏执,请尝试比较具有相同(大小,SHA1)签名的文件.将,但是,要读这两个文件完全如果他们平等的.