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完全相同。

标签: Windows

已有 85 条评论

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

    1. 我看着是条狗,太胖了

    2. FROYO

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

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

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

    1. FROYO

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

      1. 今天能看见了。

        1. FROYO

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

      2. D:myPHPServhtdocsbaidudl.php没响应

        1. FROYO

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

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

    1. FROYO

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

  4. 西澪茶社

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

    1. 副楼主

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

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

    1. FROYO

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

      1. austin

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

        1. FROYO

          不好找了,有时间找找

评论已关闭