不同文件也可以有相同的MD5校验值?

作者: FROYO 分类: 随笔 发布时间: 2013-06-24 08:43

MD5校验并不陌生,它常常被用于文件的一致性校验,在各大下载站都可以看到它的身影。MD5可以为任何文件产生一个同样独一无二的“数字指纹”,如果对文件做了任何改动,哪怕仅仅修改了1字节,其MD5值都会发生变化。正是因此,利用MD5算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。

突然产生这样一个想法:不同文件也可以有相同的MD5校验值。

MD5校验值的长度是固定的128Bit,其总共有2的128次方种不同的值;而被MD5校验的文件长度却是任意的:可以是1Bit、1KB甚至1GB,也就是说可以有正无穷个不同的文件。用这有限的2的128次方种不同的值去匹配正无穷个文件,结果是必然有重复的。同一个MD5值有多少不同的文件呢?答案一定是正无穷个

相同MD5校验值的文件可以有正无穷个?这有点不可思议了

那岂不是说,我们从某网站下载了一个文件,经检测下载的文件的MD5校验值与网站上提供的一致。即使这样,我们仍然不能保证这个文件就是网站上提供的那个文件,因为还有正无穷个MD5完全一样的文件,或许我们下载到的是另一个文件,只不过其MD5与网站上那个文件一致罢了。

想到这里我有点邪恶了,下载到不同的文件,MD5校验值却相同?

这意味着什么?有没有可能出现这么一种情况:网站上提供的是某杀毒软件下载,而实际下载的却是一个病毒,偏偏他们的MD5校验值是相同的?如果存在这种情况,即使我们检测过MD5的一致性,也难免要中招了。

据说某数字卫士安全软件是通过MD5来判断病毒的,如果真是这样的话某数字安全卫士岂不是要把病毒当作安全软件?

想的很邪恶,那会不会有两个可执行文件,MD5值相同,执行结果却完全不同呢?

亲手制造两个MD5完全相同,但执行结果完全不同的可执行文件

从统计概率上来说,这种情况(存在MD5相同功能不同的两个可执行文件)是一定存在的。但我始终坚信:这只是概率上存在,若要人为做出这么两个可执行文件是不可能的,直到今天,我亲自打破了它。

现在我的C盘中已经有了这么两个文件,分别为1.exe和2.exe,它们的MD5是一样的:6E763063AAE609957DBEF281CAC6EEE4。

SameMD5

这不是简单的文件复制,它们真的是不同的两个文件,只是MD5相同罢了。他们运行的结果是完全不同的:放上两张图片展示其不同的运行结果

SameMD5-1

(这是1.exe)

SameMD5-2

(这是2.exe)

或许,也许,可能还是有点无法接受?但这确实是真实存在的。下面提供这两个文件,实在无法接受可以下载之后自行对比MD5以及运行测试

下载地址:百度网盘(提取码:tewt)

一个小发现,百度云盘(网盘)是通过MD5来判断文件是否相同的:

安装百度云上传插件后,如果上传的文件与百度云已有文件重复,可以“极速秒传”。但百度云是如何判断两个文件重复呢?既然制造出MD5相同的两个不同文件,那不妨上传试一下。先安装好百度云上传插件之后,上传1.exe,然后上传2.exe。正如猜测的那样,上传2.exe时提示“极速秒传”。百度认为2.exe与1.exe是两个一样的文件,这说明百度云的判断标准是MD5校验。

BaiduYunMD5

不该再用MD5作为文件检查的方式了,至少不应该是唯一方式

既然可以人为的做出具有相同MD5校验值的不同程序,那用MD5校验作为文件检查的方式自然不那么可靠了。就像本文开头幻想的那样,下载的病毒程序与安全网站提供的MD5完全相同。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

82条评论
  • 阿波

    2019年10月25日 14:18

    Google Chrome Google Chrome Windows 7 x64 Windows 7 x64

    有没有试过用hash的不同算法, 比如md5加密和SHA-1 , md5一样但是SHA-1是否也完全一样呢? 如果不一样, 百度网盘只需要用两种不同方法摘取, 就能大大降低碰撞的概率

  • 佳娃

    2019年8月30日 11:15

    Google Chrome Google Chrome Mac OS X  10.14.5 Mac OS X 10.14.5

    这么多年了作者还会回复,佩服佩服

  • askunix

    2018年12月13日 17:51

    Google Chrome Google Chrome Windows 10 x64 Windows 10 x64

    写了一个简单的文件拷贝。
    拷贝出的文件与源文件打开内容相同,为什么两个文件的MD5不一样,是不是文件创建时间不一样所致的。

    1. FROYO

      2018年12月16日 10:59

      Google Chrome Google Chrome Windows 7 x64 Windows 7 x64

      md5和文件内容有关,与文件创建时间无关

  • 佳吾

    2018年11月19日 00:03

    Google Chrome Google Chrome Android 5.1 Android 5.1

    可不可以网盘分享一下啊 这个失效了

    1. FROYO

      2018年11月21日 00:15

      Google Chrome Google Chrome Android 7.1.1 Android 7.1.1

      年头已久,恐怕难找了

  • 码客

    2018年7月17日 09:14

    Google Chrome Google Chrome GNU/Linux x64 GNU/Linux x64

    估计百度主要考虑的是效率把,有那么一两个碰撞对他们来说无伤大雅

    1. FROYO

      2018年7月19日 19:31

      MIUI MIUI Android 7.1.1 Android 7.1.1

      啊,好几年前的了,应该是的吧

  • niko

    2017年6月11日 11:17

    Google Chrome Google Chrome Mac OS X  10.10.3 Mac OS X 10.10.3

    我还是头一次听说啊…虽然概率很低,但以后还是不能只单单用一种算法了

  • nf3

    2016年11月1日 09:54

    Google Chrome Google Chrome Windows 7 x64 Windows 7 x64

    哥连接失效了,能再发一下吗?

  • test1

    2016年7月3日 12:26

    Google Chrome Google Chrome Windows 7 x64 Windows 7 x64

    就那个fastcoll_v1.0.0.5.exe 这个工具是吧 我测试时候 比如有一个1.exe 用这个工具生成了2.EXE 3.EXE 2和3 的MD5的确一样 并且也能正常运行 和1 是一样的效果 。但是2和1 的MD5完全不一样 他只是生成了两个相同MD5的 但并没有复制给2.exe 1的MD5 呀 哪来的伪造呢

  • chunqiu

    2016年2月20日 22:58

    Firefox Firefox Windows 10 x64 Windows 10 x64

    :bobo_xieyanxiao: 正打算写一个网盘的程序, 本来打算使用MD5, 那是不是应该使用两种HASH算法, 同时使用MD5和Sha1应该比较保险吧

    1. FROYO

      2016年2月21日 07:20

      Google Chrome Google Chrome Windows 7 x64 Windows 7 x64

      是滴,再加上文件大小的判断

  • windard

    2015年12月5日 10:10

    Google Chrome Google Chrome Windows 10 x64 Windows 10 x64

    那有没有两个不同的字符串md5相同呢?我用他们的十六进制编码检测 md5值不同

    1. FROYO

      2015年12月6日 20:44

      Google Chrome Google Chrome Windows 7 x64 Windows 7 x64

      这个没有研究过唉,感兴趣的话研究一下吧

  • lentrody

    2015年7月5日 06:53

    Firefox Firefox Windows 8.1 x64 Windows 8.1 x64

    现在百度盘的校验据说还会读取一部分文件头

    1. FROYO

      2015年7月5日 23:55

      Google Chrome Google Chrome Samsung Samsung

      看来变先进了

  • zw_chen

    2015年6月5日 15:53

    Google Chrome Google Chrome Windows XP Windows XP

    我想问问,百度云如果是用md5验证文件,从而让2.exe极速秒传,那么你上传后的2.exe应该不是真正的2.exe而是1.exe?因为极速秒传实际上是没有上传,只是把1.exe显示为2.exe

    1. FROYO

      2015年6月5日 19:23

      Google Chrome Google Chrome Samsung Samsung

  • jack

    2013年11月18日 10:29

    Google Chrome Google Chrome Windows 8.1 x64 Windows 8.1 x64

    我想网盘在上传文件时不仅要检查md5值,还要检查文件的大小等等,的如果有两个文件的md5值相同,但是文件大小也相同,那概率就非常小了,甚至不可能。

    至于你上传的两个程序1.exe,2.ext,我想应该完全是同一个exe,不过这个exe中包含两张图片,首先执行的exe展示一张图片,后面执行的exe展示另一张图片,只要在注册表或文件里建立一个通信的空间就可以了,这就是你说的同md5不同程序?

    1. FROYO

      2013年11月18日 11:07

      Google Chrome Google Chrome Windows 8 Windows 8

      同样大小的、MD5相同的文件有正无穷个
      没有调查就没有发言权,不要动不动就“我想。。。”
      有没有文件操作、注册表操作、是不是完全相同的一个exe、是不是按照顺序展示不同图片、有没有一个通信空间,你完全可以下载之后确认一下
      你的前提都不成立,后面的问题无从谈起

      1. jack

        2013年11月18日 11:24

        Google Chrome Google Chrome Windows 8.1 x64 Windows 8.1 x64

        我同意“相同md5的文件有无穷多个”这个说法,但是“同样大小md5也相同的文件有无穷多个”这个理论不知道你从哪里得来。
        我刚刚看到另外一个帖子发表跟你一样的内容,我下载了他的两个exe,用winhex比对了一下,完全就是同一个exe,话说你比对过你的两个exe吗,建议你用beyond compare看一下。

        1. FROYO

          2013年11月18日 11:49

          Google Chrome Google Chrome Windows 8 Windows 8

          好吧,我仔细研究了一下,同样大小同样MD5的文件不是正无穷个,这有个变量就是文件大小,文件越大重复率越高。MD5有2的128次方种可能性,相当于一个16字节的文件的信息量。如果文件大小是1MB,那么MD5相同的文件有2的65536次方个,如果文件大小是1GB,那么MD5相同的文件有2的67108864次方个。说是正无穷个确实不够严谨,但它也绝对不是不可能。
          最简单的一个办法,直接看CRC32是否相同,如果文件相同,不仅仅是MD5、CRC32校验也应该是相同的,直接用WinRAR就能对比。

        2. FROYO

          2013年11月18日 11:59

          Google Chrome Google Chrome Windows 8 Windows 8

          版面问题,图片没显示全,右击另存为或者在新窗口中打开

      2. jack

        2013年11月18日 11:37

        Google Chrome Google Chrome Windows 8.1 x64 Windows 8.1 x64

        你说你的两个exe为两个不同的exe唯一依据,就是运行的结果不同,凭这一点说他们不是同一个程序,我不知道你是不是有点缺乏编程常识,这中间通过随机数调用,或变量的变化完全可以做到。

        这种不经思考和推敲的论断,自己被别人骗了也罢了,还误导别人,在这里危言耸听

        1. FROYO

          2013年11月18日 11:54

          Google Chrome Google Chrome Windows 8 Windows 8

          这个程序是我亲自写出来的,过程中没有随机数的产生和使用
          如果我自己写的程序你都认为我“没有经过思考和推敲的论断”,“没有编程常识”,呵呵,你太彪悍了

        2. jack

          2013年11月18日 13:05

          Google Chrome Google Chrome Windows 8.1 x64 Windows 8.1 x64

          那麻烦提供下这两个程序的下载链接
          我想研究下相同大小,相同md5,不同内容的exe文件是怎么练成的。

        3. FROYO

          2013年11月18日 11:56

          Google Chrome Google Chrome Windows 8 Windows 8

          还有啊,这哪里危言耸听了?

        4. FROYO

          2013年11月18日 12:03

          Google Chrome Google Chrome Windows 8 Windows 8

          你在这里的发言基本上全是那种“我想。。。”的猜想,然后在自己猜想的基础上进一步论证错误所在,这样最终只能证明你自己猜想错了
          看的出来,这篇文章你没有好好看,只是揪着一个观点钻牛角尖,毫无实际意义

    2. jack

      2013年11月18日 13:54

      Google Chrome Google Chrome Windows 8.1 x64 Windows 8.1 x64

      好,道歉来了!
      刚才详细了解了md5的被破解状况,并下载了fastcoll试验了一下,确实可以让两个exe的md5相同,但是用beyond compare比对,发现中间有不同部分。

      本人比较无知和贸然,望楼主见谅。

    3. 诸子百家

      2014年12月4日 11:27

      Google Chrome Google Chrome Windows XP Windows XP

      楼主果然强大啊

  • 0okmnbvcxzx

    2013年9月27日 16:35

    Internet Explorer Internet Explorer Windows XP Windows XP

    就是制作这两个文件的程序?

    1. FROYO

      2013年9月27日 17:23

      Google Chrome Google Chrome Windows Server 2003 Windows Server 2003

      有个MD5碰撞器,网上找找吧

  • 0okmnbvcxzx

    2013年9月22日 23:41

    Android Webkit Android Webkit HTC IncredibleS HTC IncredibleS

    软件能给我发一份不?

    1. FROYO

      2013年9月22日 23:51

      Google Chrome Google Chrome Windows Server 2003 Windows Server 2003

      给你发一份什么

  • 神爱

    2013年7月12日 11:39

    Google Chrome Google Chrome Windows 8 x64 Windows 8 x64

    目前检验在用SHA1和SHA-256
    部分SHA-512

  • 清晨

    2013年7月4日 19:55

    Google Chrome Google Chrome Windows XP Windows XP

    在王小云公布结果后,MD5可以人为碰撞了,就已经不安全了…
    秒传自然是基于HASH的,不过HASH的家族里里不仅仅有MD5,比如常用的还有SHA-1和CRC32(这个似乎略酱油…)刚刚用这两个文件在115网盘做了测试,在第一个上传完之后,第二个依然是需要上传的。这说明115的上传控件用了至少两种HASH校验…

    1. FROYO

      2013年7月4日 20:02

      Opera Mobile Opera Mobile Android 4.2.2 Android 4.2.2

      SHA-1碰撞也公布了,如果能做出一个MD5,SHA-1都相同的不同文件就更厉害了

      1. 清晨

        2013年7月4日 20:09

        Google Chrome Google Chrome Windows XP Windows XP

        嗯,是的,病毒作者们就太happy了…
        这说明我们需要更复杂的算法,制作更长的HASH值…

        1. FROYO

          2013年7月4日 23:57

          Opera Mobile Opera Mobile Android 4.2.2 Android 4.2.2

          这几年应该会有新算法出现吧

        2. 清晨

          2013年7月5日 00:17

          Google Chrome Google Chrome Windows XP Windows XP

          这个得问密码学专家了,不知道这个是不是能跟快做出来。似乎,不容易。

  • 微历史

    2013年6月28日 14:59

    Firefox Firefox Windows XP Windows XP

    博主对百度的网盘了解不少的嘛

    1. FROYO

      2013年6月28日 15:14

      Safari Safari Mac OS X  10.7.3 Mac OS X 10.7.3

      不是很了解呀。。。

  • Yang

    2013年6月28日 14:49

    Google Chrome Google Chrome Windows 7 x64 Windows 7 x64

    秒传肯定是检查MD5的

  • 小冬网赚博客

    2013年6月28日 12:50

    Google Chrome Google Chrome Windows 7 x64 Windows 7 x64

    支持 支持 呵呵

  • 品牌女装库存

    2013年6月28日 10:53

    Sogou Explorer Sogou Explorer Windows 7 x64 Windows 7 x64

    过来学习下技术哈!

    1. FROYO

      2013年6月28日 11:30

      Safari Safari Mac OS X  10.7.3 Mac OS X 10.7.3

      欢迎来访~~~

  • 空空裤兜

    2013年6月28日 10:51

    Google Chrome Google Chrome Windows 7 Windows 7

    从来不检查MD5值的飘过~~~~

    1. FROYO

      2013年6月28日 11:30

      Safari Safari Mac OS X  10.7.3 Mac OS X 10.7.3

      话说现在没多少人检测MD5了,MD5要成摆设啊

  • 光辉

    2013年6月28日 09:43

    Google Chrome Google Chrome Windows 7 x64 Windows 7 x64

    不应该是这个样子,MD5应该是独有的。

    1. FROYO

      2013年6月28日 10:38

      Safari Safari Mac OS X  10.7.3 Mac OS X 10.7.3

      必然不是独有的,MD5是有限的,文件是无限的

    2. sxgkwei

      2014年9月5日 17:31

      Firefox Firefox Windows 7 x64 Windows 7 x64

      。。。。MD5都能独有。,我去。

  • Winter

    2013年6月27日 10:44

    Internet Explorer Internet Explorer Windows XP Windows XP

    MD5确实是个神奇的编码

    1. FROYO

      2013年6月28日 10:47

      Safari Safari Mac OS X  10.7.3 Mac OS X 10.7.3

      MD5正在被破解

  • 小媒体

    2013年6月27日 10:25

    Internet Explorer Internet Explorer Windows 7 x64 Windows 7 x64

    确实是有这个可能,不过只要不刻意为之,这个校验方式还是问题不大。

  • 小草元

    2013年6月26日 18:24

    Google Chrome Google Chrome Windows 8 Windows 8

    这种情况不让我意外 ,我意外的是你是怎么做出两个MD5校验值相同的文件的?这个超级关键啊~~~

    1. FROYO

      2013年6月27日 09:48

      Opera Mobile Opera Mobile Android 4.2.2 Android 4.2.2

      用那个碰撞器fastcoll产生的

      1. 小草元

        2013年6月27日 11:34

        Opera Mini Opera Mini J2ME/MIDP Device J2ME/MIDP Device

        碰撞器?我得网上找找去,这东西就是暴力破解器啊!!

        1. FROYO

          2013年6月27日 18:47

          Opera Mobile Opera Mobile Android 4.2.2 Android 4.2.2

          破解不了,只能生成md5相同的两个文件

  • Leniy

    2013年6月26日 16:22

    Google Chrome Google Chrome Windows 7 Windows 7

    原来如此,06年就已经有公开的fastcoll碰撞生成器了

    1. FROYO

      2013年6月26日 22:15

      Safari Safari Mac OS X  10.7.3 Mac OS X 10.7.3

      对对,就是这个东西

  • Leniy

    2013年6月26日 16:10

    Google Chrome Google Chrome Windows 7 Windows 7

    另外你这两个文件是怎么生成的,根据之前nature论文上爆出的那个序列串?

  • Leniy

    2013年6月26日 16:09

    Google Chrome Google Chrome Windows 7 Windows 7

    不同时见证md5和SHA1的hash么

    1. FROYO

      2013年6月26日 22:14

      Safari Safari Mac OS X  10.7.3 Mac OS X 10.7.3

      SHA1是不同的

  • 小怪兽

    2013年6月26日 14:00

    Google Chrome Google Chrome Windows XP Windows XP

    能看见一张图片~那是猪还是狗哦~好萌哦

    1. FROYO

      2013年6月26日 14:06

      Safari Safari Mac OS X  10.7.3 Mac OS X 10.7.3

      看来我该换主机了,据闻是狗

      1. 小怪兽

        2013年6月27日 10:34

        Google Chrome Google Chrome Windows XP Windows XP

        这狗长的太奇葩了,狗的头~猪的身子

    2. Leniy

      2013年6月26日 16:22

      Google Chrome Google Chrome Windows 7 Windows 7

      我看着是条狗,太胖了

  • tiandi

    2013年6月25日 13:12

    Google Chrome Google Chrome Windows 7 Windows 7

    图好像都挂了,我这显示一片空白。

    1. FROYO

      2013年6月25日 23:54

      Safari Safari Mac OS X  10.7.3 Mac OS X 10.7.3

      图片没有挂啊,可能是VPS线路不太理想的原因吧

      1. Leniy

        2013年6月26日 16:12

        Google Chrome Google Chrome Windows 7 Windows 7

        D:\myPHPServ\htdocs\baidudl.php没响应

        1. FROYO

          2013年6月26日 22:16

          Safari Safari Mac OS X  10.7.3 Mac OS X 10.7.3

          今天VPS线路抽风了,所以。。。

      2. tiandi

        2013年6月27日 08:51

        Google Chrome Google Chrome Windows 7 Windows 7

        今天能看见了。

        1. FROYO

          2013年6月27日 09:49

          Opera Mobile Opera Mobile Android 4.2.2 Android 4.2.2

          获取地址是在服务器端完成的,美国线路试不试抽风,只要它不抽风就能看到图片

  • DearTanker

    2013年6月25日 00:38

    Internet Explorer Internet Explorer Windows 8 x64 Windows 8 x64

    之前有查过资料说是会有相同的情况,话说我想知道你是怎么生成两个MD5一样的文件的?

    1. FROYO

      2013年6月26日 00:09

      Safari Safari Mac OS X  10.7.3 Mac OS X 10.7.3

      有一个冲击算法程序,可以生成两个MD5一样的文件

  • 西澪茶社

    2013年6月24日 19:26

    Google Chrome Google Chrome Windows 8 Windows 8

    6岁就知道了,还写了个玩意过360,伪装成360
    坑爹求安慰…
    http://www.ixiling.com/post/2013-06-24/40051504298
    看看

    1. 副楼主

      2015年4月10日 11:27

      Google Chrome Google Chrome Windows 8.1 x64 Windows 8.1 x64

      哈哈哈哈,代表楼主安慰你一下。戏弄数字是不是很好玩

  • 夏宇轩

    2013年6月24日 09:39

    Internet Explorer Internet Explorer Windows XP Windows XP

    原来如此啊,这个还真是第一次了解

    1. FROYO

      2013年6月24日 09:47

      Safari Safari Mac OS X  10.7.3 Mac OS X 10.7.3

      我也是刚刚才知道可以这样的。。。

      1. austin

        2015年12月12日 17:54

        Google Chrome Google Chrome Windows 7 x64 Windows 7 x64

        大大 檔案還在嗎?
        因為功課上需要用到
        能否借用檔案做 作業

        1. FROYO

          2015年12月14日 20:22

          Safari Safari iPhone iOS 9.2 iPhone iOS 9.2

          不好找了,有时间找找