使用MD5校验和在多个硬盘搜索重复文件是否安全?

5 投票
2 回答
4835 浏览
提问于 2025-04-18 08:27

我被分配了一个任务,要把大约15年的实验室记录整合起来,这些记录大部分是学生的作业或者原始数据。总共有超过10万个人工生成的文件。

我的计划是写一个Python 2.7的脚本,来映射整个文件夹的结构,为每个文件创建一个校验和,然后标记重复的文件以便删除。我预计大约有10%到25%的文件是重复的。

我了解到,理论上MD5校验和碰撞是可能发生的,但几乎不太可能,所以这个过程基本上是安全的(可以说如果发生一次碰撞,我的工作还是安全的)。

这是一个安全的假设吗?如果实现方式很重要的话,我打算使用的Python库有:

  • hashlib 用于生成校验和;
  • sqlite 用于存储结果;
  • os 用于映射文件夹结构。

2 个回答

1

最近关于MD5碰撞的研究可能让你感到困惑,因为在2013年,有人提出了可以在普通电脑上用1秒钟生成MD5碰撞的算法。不过我可以告诉你,这并不意味着MD5就不能用来检查文件的完整性和重复性。实际上,两个正常使用的文件产生相同的哈希值的可能性是非常小的,除非你故意去找麻烦,或者使用了相同哈希值的二进制文件。如果你还是觉得不安,那我建议你使用更大的哈希函数,比如SHA-512

13

意外地在两个文件之间找到一个md5碰撞的概率是:

0.000000000000000000000000000000000000002938735877055718769921841343055614194546663891

被一个直径15公里的小行星撞到的概率是0.00000002。我觉得可以说是有可能的。

备份文件和好好测试脚本仍然是个好主意,因为人类错误和程序漏洞更容易发生。

撰写回答