当前栏目
MD5碰撞你也能实现
文章开头先说明:这个不是什么新闻了,大概是08年的事。最近突然看到一些言论,才又想起了这么一回事。拿出来做文章只是当做科普,因为好多人都还不了解这么一回事。那我就科普一回,给各位介绍一下。
如果你还不知道什么是MD5
MD5即Message-Digest Algorithm 5(资讯-摘要演算法 5),用于确保资讯传输完整一致。 是电脑广泛使用的杂凑演算法之一(又译摘要演算法 、哈希演算法),主流程式語言普遍已有MD5实做。是电脑广泛使用的杂凑演算法之一(又译摘要演算法 、哈希演算法),主流程式语言普遍已有MD5实作。
维基百科的解释:http://zh.wikipedia.org/wiki/MD5
百度百科的解释:http://baike.baidu.com/view/7636.htm
简而言之,设计MD5的初衷,就是使每一个文件有不同的MD5,用于辨别和鉴定。
如果你在网上下载文件有留意过,就会发现MD5的踪迹。不仅如此,MD5还被广泛的运用于加密和验证。比如我们的wordpress,在处理用户密码的时候也用到了MD5。不过过程更复杂一些。
如果你知道了,但是却不明白MD5有什么用
如果A与B要通过网络传送文件,那么A可以把文件的MD5计算以后告诉B,再传送文件。B收到文件以后,也计算一次MD5。如果计算结果与A告知的一致,那么文件在传输过程中没有被篡改。当然,更常用的办法是:A与B事先约定一个密码,然后把文件用密码加密。加密后A计算MD5并告知B,同时发送加密后的文件。这样就算MD5值在A发往B的途中被篡改,也不能达到中间人攻击的效果。
当然,MD5还有更广泛的用途。
如果你明白了以上的内容,那么
你应该明白,MD5的设计初衷是:对于两个不同的文件而言,MD5应该是不同的。
但是事事无绝对,虽然在数学上,MD5是不能反推的,但是却能够以其他方式达到相同的效果,比如碰撞。
什么是碰撞
所谓碰撞,就是已知一个文件或者数据,构造另一个与其MD5值一样的文件或数据。
MD5推出至今已经有不少年了,但却一直没有更新。早在07年,就有人提出了MD5碰撞的可能。而这种可能,到了08年变为了现实。
由于涉及隐秘性,所以大多数研究机构都并未放出其最新的研究成果。各国的MD5碰撞计划究竟如何,我们也便不得而知。
也或许因为MD5已经岌岌可危,所以专家们便失去了对他的研究兴趣?
不久以前,已经有机构宣布成功的破解了数字证书的认证,能够对数字证书进行仿冒。而该组织也宣称,安全起见,所有实验数据均已销毁。仅保留了部分理论性的论文。
如果你对理论没有兴趣,下面是实践
解开以后只有一个可执行程序,需要在命令行运行。
首先,reizhi创建了一个txt,内容如下:
然后打开命令行,运行碰撞程序
上面显示出来的一长串数字就是输入文件的MD5了。下面显示,仅仅用了15.859s就完成了碰撞。
生成了1_msg1.txt和1_msg2.txt两个文件。打开看看就知道了。
一样吗?一眼就看出来了,肯定不一样,而且不一样的地方还不少。
那再看看MD5
一样吗?当然是一样的,都说是MD5碰撞了。不过,MD5碰撞,CRC和SHA-1当然不会一样,这个我就不检验了。
各位有兴趣就自行下载检验好了。
结论
呵呵,看到这各位肯定不用我来下结论了。MD5已经不够安全了,如果仍然只使用MD5那么肯定是很危险的一件事情。
而报告也指出,SHA-1的安全性也不够,能够在可接受的时间内被碰撞。
这些,就让那些专业人士去争吧,我们了解一下也就够了。
不过现在主流的破解MD5方式还是用暴力破解法。即穷举。此种方法对于弱密码很有效,不过要是你的密码足够强壮,也就不怕了。
附上两个MD5加解密的网站
相关文章
- 使用es6模板字符串嵌入变量,并实现循环「建议收藏」
- MD5算法的Java实现
- 如何用最简单的方式解释依赖注入?依赖注入是如何实现解耦的?
- oracle 创建字段自增长实现方式
- MySQL程序操作入门:快速学习提早实现数据库管理(mysql程序使用)
- MySQL ID自增:实现自动唯一标识(mysqlid自增长)
- Oracle实现MD5解密的方法(oracle解密md5)
- Oracle中实现MD5加密的方法(oraclemd5加密)
- MySQL查询实现高效数据输出(mysql查询输出)
- 函数使用MSSQL字符串函数实现数据处理(mssql字符串)
- Oracle数据库实现分区转换(oracle转换分区)
- MySQL中如何使用MD5加密方式(mysql中md5)
- 阿里云MySQL实现主从同步及热备:保障数据安全与高效运营(阿里云mysql主从热备)
- 在Linux上实现iSCSI服务(iscsi服务linux)
- Linux下Awk函数:实现复杂任务的好帮手(linux awk 函数)
- MySQL数据库连接池:快速实现配置的指南(mysql数据连接池配置)
- Oracle中MD5主键的实现(md5主键 oracle)
- 破解Oracle MD5加密算法的强大之路(md5 oracle解密)
- Oracle IPC键值实现数据共享(ipc键值 oracle)
- ifix实现Oracle数据轻松读取(ifix读取oracle)
- Oracle 中实现MD5加密的简单操作(oracle中md5加密)
- 用Oracle加密将MD5转换为小写(oracle md5小写)
- Redis实现多表关联设计的有效性(redis表关联设计)
- Jquery类网页微信二维码图块滚动效果具体实现
- c++实现MD5算法实现代码
- java实现MD5加密算法的实例代码
- Mysql中实现提取字符串中的数字的自定义函数分享
- VB实现的16位和32位md5加密代码分享
- C#读取文件MD5值的实现代码