|
编译前的是.java保存文件完毕
编译后/能运行的是.class保存文件完毕
能执行的无论是执行前還是执行后都是.class保存文件完毕,不会变除非重编译
你对这个回答的评价是?
你对这个回答的评价是
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相同功能不同的两个可执行保存文件完毕)是一定存在的。但我始终坚信:这只是概率上存在若要人为做出这么两个可执行保存文件完毕是不可能的,直到今天我亲自打破了它。
这不是简单的保存文件完毕复制它們真的是不同的两个保存文件完毕,只是MD5相同罢了他们运行的结果是完全不同的:放上两张图片展示其不同的运行结果
或许,也许可能还是有点无法接受?但这确实是真实存在的下面提供这两个保存文件完毕,实在无法接受可以下载之后自行对比MD5以及运行测试
下载地址:(提取码:tewt)
一个小发现百度云盘(网盘)是通过MD5来判断保存文件完毕是否相同的:
***百度云上传插件后,如果上传的保存文件唍毕与百度云已有保存文件完毕重复可以“极速秒传”。但百度云是如何判断两个保存文件完毕重复呢既然制造出MD5相同的两个不同保存文件完毕,那不妨上传试一下先***好百度云上传插件之后,上传1.exe然后上传2.exe。正如猜测的那样上传2.exe时提示“极速秒传”。百度认為2.exe与1.exe是两个一样的保存文件完毕这说明百度云的判断标准是MD5校验。
不该再用MD5作为保存文件完毕检查的方式了至少不应该是唯一方式
既嘫可以人为的做出具有相同MD5校验值的不同程序,那用MD5校验作为保存文件完毕检查的方式自然不那么可靠了就像本文开头幻想的那样,下載的病毒程序与安全网站提供的MD5完全相同