标签:散列值 fastcoll 碰撞 算法 原理 MD5 md5
MD5碰撞原理简单介绍及其实现
MD5是什么
MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16[字节]的散列值(hash value)),用于确保信息传输完整一致。MD5由美国密码学家[罗纳德·李维斯特](Ronald Linn Rivest)设计,于1992年公开,用以取代[MD4]算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如[SHA-2]。2004年,证实MD5算法无法防止碰撞,因此不适用于安全性认证,如[SSL]公开密钥认证或是[数字签名]等用途。
MD5的原理
直接看百度上的图就一目了然了
MD5的“破解”
2004年,我国中科院院士王小云证实md5算法无法防止碰撞,因此,不适用于安全性认证。在2005年,王小云院士提出了md5哈希碰撞,公式如下
f(f(s, M), M') = f(f(s, N), N')
所谓的“破解”其实用“碰撞”一词语更为妥当,因为她的研究成果表明了给定消息 M1
,能够计算获取 M2
,使得 M2
产生的散列值与 M1
产生的散列值相同,即:
MD5(M1)=MD5(M2)
于是乎MD5不满足抗碰撞性,于是不再是安全的散列算法
但是
直到现在,给出一个MD5散列值,然后通过计算还原出原文来是不可能的的。也就是说通过一个MD5后的密文,回推明文目前还是没有方法的。
这里给出相关论文:http://www.paper.edu.cn/scholar/paper/wangxiaoyun-2
碰撞实现
这里介绍一个MD5碰撞的工具:fastcoll,fastcoll 可以用来对给定的前缀快速生成md5碰撞 (也就是说,生成两个不同的文件,每个文件都是在给定的内容后面附加一段东西生成的)
给出其主页:https://www.win.tue.nl/hashclash/
相关文章:https://homepages.cwi.nl/~stevens/papers/eprint-2006-104-S.pdf
下面给出示例,我们创建一个文本文档在里面写入123456789
将其拖入fastcoll后得到两个文件
经过检验可以发现,第一个文档和第二个文档字符串不同,但最终MD5值相同
其他
之前打比赛的时候学习过一点技巧,可以通过python来爆破md5中的几位,下面给出一份示例python代码
1. import hashlib
2. for i in range(0,9999999999999999):
3. md5=hashlib.md5(str(i).encode("utf-8")).hexdigest()
4. if md5[0:5]=="66666": #md5后前五位是66666
5. print(i)
6. print("no result")
该脚本实现了纯数字通过MD5加密后相应位数是特定字符的功能
最后
thanks for reading
标签:散列值,fastcoll,碰撞,算法,原理,MD5,md5 来源: https://www.cnblogs.com/wysngblogs/p/15905398.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。