漫画:如何破解MD5算法?
来自:梦见(微信号:dreamsee321)
在之前的漫画中,我们介绍了MD5算法的基本概念和底层原理,没看过的小伙伴们可以点击下面的链接:
漫画:什么是MD5算法?
这一次,我们来讲解如何破解MD5算法。
设MD5的哈希函数是H(X),那么:
H(A) = M
H(B) = M
任意一个B即为破解结果。
B有可能等于A,也可能不等于A。
用一个形象的说法,A和B的MD5结果“殊途同归”。
MD5碰撞通常用于登陆密码的破解。应用系统的数据库中存储的用户密码通常都是原密码的MD5哈希值,每当用户登录时,验签过程如下:
如果我们得到了用户ABC的密码哈希值E10ADC3949BA59ABBE56E057F20F883E,并不需要还原出原密码123456,只需要“碰撞”出另一个原文654321(只是举例)即可。登录时,完全可以使用654321作为登陆密码,欺骗过应用系统的验签。
暴力枚举法
字典法
彩虹表法
H(X):生成信息摘要的哈希函数,比如MD5,比如SHA256。
R(X):从信息摘要转换成另一个字符串的衰减函数(Reduce)。其中R(X)的定义域是H(X)的值域,R(X)的值域是H(X)的定义域。但要注意的是,R(X)并非H(X)的反函数。
通过交替运算H和R若干次,可以形成一个原文和哈希值的链条。假设原文是aaaaaa,哈希值长度32bit,那么哈希链表就是下面的样子:
这个链条有多长呢?假设H(X)和R(X)的交替重复K次,那么链条长度就是2K+1。同时,我们只需把链表的首段和末端存入哈希表中:
给定信息摘要:920ECF10
如何得到原文呢?只需进行R(X)运算:
R(920ECF10) = kiebgt
查询哈希表可以找到末端kiebgt对应的首端是aaaaaa,因此摘要920ECF10的原文“极有可能”在aaaaaa到kiebgt的这个链条当中。
接下来从aaaaaa开始,重新交替运算R(X)与H(X),看一看摘要值920ECF10是否是其中一次H(X)的结果。从链条看来,答案是肯定的,因此920ECF10的原文就是920ECF10的前置节点sgfnyd。
需要补充的是,如果给定的摘要值经过一次R(X)运算,结果在哈希表中找不到,可以继续交替H(X)R(X)直到第K次为止。
给定信息摘要:FB107E70
经过多次R(X),H(X)运算,得到结果kiebgt
通过哈希表查找末端kiebgt,可以找出首端aaaaaa
但是,FB107E70并不在aaaaaa到kiebgt的哈希链条当中,这就是R(X)的碰撞造成的。
这个问题看似没什么影响,既然找不到就重新生成一组首尾映射即可。但是想象一下,当K值较大的时候,哈希链很长,一旦两条不同的哈希链在某个节点出现碰撞,后面所有的明文和哈希值全都变成了一毛一样的值。
这样造成的后果就是冗余存储。原本两条哈希链可以存储 2K个映射,由于重复,真正存储的映射数量不足2K。
2004年,王小云教授提出了非常高效的MD5碰撞方法。
2009年,冯登国、谢涛利用差分攻击,将MD5的碰撞算法复杂度进一步降低。
几点补充:
对于单机来说,暴力枚举法的时间成本很高,字典法的空间成本很高。但是利用分布式计算和分布式存储,仍然可以有效破解MD5算法。因此这两种方法同样被黑客们广泛使用。
—————END—————
系列文章:
《漫画:什么是一致性哈希?》
《漫画:什么是B+树?》
《漫画:什么是B-树?》
《漫画:什么是跳跃表?》
《漫画:什么是动态规划?》
《漫画:当程序猿遇上智力测试题》
《漫画:判断 2 的乘方》
《漫画算法:最小栈的实现》
《漫画:什么是大数据?》
《漫画算法:无序数组排序后的最大相邻差值》
《漫画:什么是Bitmap算法?》
《漫画:Bitmap算法 进阶篇》
《什么是A*寻路算法?》
《漫画:当程序员遇上智力题(第四季)》
《漫画:什么是Base64算法?》
《漫画:什么是MD5算法?》
●本文编号2700,以后想阅读这篇文章直接输入2700即可
●输入m获取文章目录
推荐↓↓↓
算法与数据结构
更多推荐《18个技术类微信公众号》
涵盖:程序人生、算法与数据结构、黑客技术与网络安全、大数据技术、前端开发、Java、Python、Web开发、安卓开发、iOS开发、C/C++、.NET、Linux、数据库、运维等。
漫画:如何破解MD5算法?相关推荐
- 漫画:如何破解MD5算法
转载自 玻璃猫 程序员小灰 在之前的漫画中,我们介绍了MD5算法的基本概念和底层原理,没看过的小伙伴们可以点击下面的链接:<漫画:什么是MD5算法?> 这一次,我们来讲解如何破解MD5算法 ...
- 安全架构-md5算法介绍
安全架构-md5算法介绍 安全架构知识,我们必不可少离不开的就是md5,包括接口签名,文件摘要,密码加密等等.本文介绍md5算法. 文章目录 安全架构-md5算法介绍 一.md5是什么? 二.特点 三 ...
- 漫画:什么是MD5算法?
来自:梦见(微信号:dreamsee321) 摘要哈希生成的正确姿势是什么样呢?分三步: 1.收集相关业务参数,在这里是金额和目标账户.当然,实际应用中的参数肯定比这多得多,这里只是做了简化. 2.按 ...
- MD5算法可以破解么?为什么?网上有在线破解是怎么回事?
答:MD5算法不可以破解. 因为MD5是单向散列函数,输入任意长度的信息,经过处理,输出为128位的信息:不同的输入得到的不同的结果:根据128位的输出结果不可能反推出输入的信息.所以不能从密文(散列 ...
- (摘录)MD5算法研究与破解
md5的全称是message-digest algorithm 5(信息-摘要算法),在90年代初由mit laboratory for computer science和rsa data secur ...
- MD5算法已经被破解
MD5算法已经被破解 发表: babyfrog 时间: 2004/09/04 19:55:19 发信人: bluemyosotis (抽筋的天使), 信区: SDU 标 题: 密码学领域重大发现:山东 ...
- 石破天惊! MD5算法被破解!
按:MD5不安全了?SHA不安全了?HASH完了?一大早来到办公室,无意中看到这么一条新闻,继而在网上搜索了一个多小时,没有找到王教授这篇文章的原文.只看到山大几十分钟前发表的这篇新闻.期待各位IT同 ...
- 彩虹表破解开机密码、MD5算法等的原理
http://www.91ri.org/7593.html 自己发到91ri的,博客备份下. 前言 或许对于大多数人来说,实际中并不需要了解这些理论,能够使用现成的工具就行,但是我个人觉得了解了这些 ...
- 漫画:什么是MD5算法
转载自 玻璃猫 程序员小灰 摘要哈希生成的正确姿势是什么样呢?分三步: 1.收集相关业务参数,在这里是金额和目标账户.当然,实际应用中的参数肯定比这多得多,这里只是做了简化. 2.按照规则,把参数名和 ...
最新文章
- 报表 表格间距_从易读性和易操作性两大方面,教你做好表格设计
- 【练习】ViewPager标签滑动
- [文摘20071113]十四项心理定律
- JS生成x到y的随机数
- linux编译动态库之-fPIC
- netty在项目中实际使用_聚合氯化铝在实际使用中的用法和用量
- linux内核head.S文件分析
- java 从excel中读取数据_java如何从excel中读出数据
- php 返回mp3,当从PHP提供mp3时,audio.duration在Safari上返回Infinity
- “吸才”的字节跳动和“散才”的好未来
- netstat mysql_mysql-netstat
- kubenetes 1.4的Master节点克隆并改造为node节点以及node查询问题解决
- DSSM,Deep Structured Semantic Models
- isupper函数python_python字符串是否是大写-python 字符串大写-python isupper函数-python isupper函数未定义-嗨客网...
- MacOS删除开机启动项
- 基于springBoot+MyBatis+Vue的前后端分离旅游管理系统
- C++学习笔记:实现向量类的加减赋值运算,重载运算符
- 后台启动elastisearch-head,避免后台启动es head在关闭shell后es head自动关闭,网上一大堆错误的,这个是正解,来自互联网
- 一个For语句导致死循环的例子
- Eureka健康检查