Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.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
Python 使用MD5校验和在多个硬盘上搜索重复文件是否安全?_Python_Md5_Checksum - Fatal编程技术网

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

Python 使用MD5校验和在多个硬盘上搜索重复文件是否安全?,python,md5,checksum,Python,Md5,Checksum,我的任务是整合实验室大约15年的记录,其中大部分是学生作品或原始数据。我们说的是100000多个人工生成的文件 我的计划是编写一个Python2.7脚本,它将映射整个目录结构,为每个目录结构创建校验和,然后标记重复项以便删除。我预计可能有10-25%的重复 我的理解是,从理论上讲,MD5碰撞是可能的,但这不太可能本质上是一个安全的过程(假设发生1次碰撞,我的工作是安全的) 这是一个安全的假设吗?在实现方面,我只打算使用以下Python库: 校验和的hashlib sqlite用于将结果存入数据

我的任务是整合实验室大约15年的记录,其中大部分是学生作品或原始数据。我们说的是100000多个人工生成的文件

我的计划是编写一个Python2.7脚本,它将映射整个目录结构,为每个目录结构创建校验和,然后标记重复项以便删除。我预计可能有10-25%的重复

我的理解是,从理论上讲,MD5碰撞是可能的,但这不太可能本质上是一个安全的过程(假设发生1次碰撞,我的工作是安全的)

这是一个安全的假设吗?在实现方面,我只打算使用以下Python库:

  • 校验和的hashlib
  • sqlite
    用于将结果存入数据库
  • os
    用于目录映射

意外发现两个文件之间存在冲突的概率为:

0.000000000000000000000000000000000000002938735877055718769921841343055614194546663891
被15公里大小的物体击中的概率是
0.00000002
。我会同意的


备份文件和测试脚本仍然是一个很好的建议,人类的错误和错误更容易发生。

最近关于MD5冲突的研究可能让你感到困惑,因为2013年,一些人给出了在普通计算机上在1秒内生成MD5冲突的算法,但我向你保证,这不会使使用MD5检查文件完整性和重复性无效。极不可能得到两个具有相同散列的正常使用文件,除非您显然是故意找麻烦,并使用相同的散列来创建二进制文件。如果你仍然有妄想症,那么我建议你使用更大的键空间散列函数,比如SHA-512

是的,我将从这个问题的存在和各种答案中推断,确实,这样做是安全的。我将再次结束此讨论,谢谢。您可能还会发现此MD5冲突讨论与此相关:。如果您想变得特别偏执,可以使用更好的哈希,例如SHA-512(也可在hashlib中获得)。碰撞在天文学上更不可能发生,即使有人想发生碰撞,也不可能发生碰撞(MD5不是这样)。出于好奇,为什么要使用MD5而不是SHAx?是的,128位哈希空间足够大,与少于一百万个文件发生碰撞在天文学上是不可能的。如果你担心,你可以移动到一个更大的散列空间(已经提到SHA-512),然后回去测试可能的重复项是否真正相等。但是有将近50亿种方法可以选择100000个项目对。这是我收到的堆栈问题的最佳答案,哈哈。不要假设您对文件中有多少部分需要用作识别签名有意见?我的直觉告诉我“如果你想确定的话,所有这些都可以”,但原因告诉我,在几个硬盘上散列每一点都是相当密集的。@Jonline我相信你想散列文件的一部分?这是危险的,因为许多相同类型的二进制格式共享一些共同的头文件,很可能你有两个具有相似头文件的文件,因此签名相似。我在StackOverflow上的其他地方看到了评论,在研究这一点时,这表明(这是在视频等媒体文件的上下文中)散列kb的文件将足以达到确定的程度。我只是好奇你对这件事是否有意见!