不同文件也可以有相同的MD5校验值?
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。
这不是简单的文件复制,它们真的是不同的两个文件,只是MD5相同罢了。他们运行的结果是完全不同的:放上两张图片展示其不同的运行结果
(这是1.exe)
(这是2.exe)
或许,也许,可能还是有点无法接受?但这确实是真实存在的。下面提供这两个文件,实在无法接受可以下载之后自行对比MD5以及运行测试
下载地址:百度网盘(提取码:tewt)
一个小发现,百度云盘(网盘)是通过MD5来判断文件是否相同的:
安装百度云上传插件后,如果上传的文件与百度云已有文件重复,可以“极速秒传”。但百度云是如何判断两个文件重复呢?既然制造出MD5相同的两个不同文件,那不妨上传试一下。先安装好百度云上传插件之后,上传1.exe,然后上传2.exe。正如猜测的那样,上传2.exe时提示“极速秒传”。百度认为2.exe与1.exe是两个一样的文件,这说明百度云的判断标准是MD5校验。
不该再用MD5作为文件检查的方式了,至少不应该是唯一方式
既然可以人为的做出具有相同MD5校验值的不同程序,那用MD5校验作为文件检查的方式自然不那么可靠了。就像本文开头幻想的那样,下载的病毒程序与安全网站提供的MD5完全相同。
请问是如何做到的呢
MD5碰撞,文件尾部是不同的,代码里面用条件判断一下尾部
有没有试过用hash的不同算法, 比如md5加密和SHA-1 , md5一样但是SHA-1是否也完全一样呢? 如果不一样, 百度网盘只需要用两种不同方法摘取, 就能大大降低碰撞的概率
md5、sha不可能做到同时一样。
这么多年了作者还会回复,佩服佩服
写了一个简单的文件拷贝。
拷贝出的文件与源文件打开内容相同,为什么两个文件的MD5不一样,是不是文件创建时间不一样所致的。
md5和文件内容有关,与文件创建时间无关
可不可以网盘分享一下啊 这个失效了
年头已久,恐怕难找了
估计百度主要考虑的是效率把,有那么一两个碰撞对他们来说无伤大雅
啊,好几年前的了,应该是的吧
我还是头一次听说啊...虽然概率很低,但以后还是不能只单单用一种算法了
哥连接失效了,能再发一下吗?
就那个fastcoll_v1.0.0.5.exe 这个工具是吧 我测试时候 比如有一个1.exe 用这个工具生成了2.EXE 3.EXE 2和3 的MD5的确一样 并且也能正常运行 和1 是一样的效果 。但是2和1 的MD5完全不一样 他只是生成了两个相同MD5的 但并没有复制给2.exe 1的MD5 呀 哪来的伪造呢
:bobo_xieyanxiao: 正打算写一个网盘的程序, 本来打算使用MD5, 那是不是应该使用两种HASH算法, 同时使用MD5和Sha1应该比较保险吧
是滴,再加上文件大小的判断