来自:梦见(微信号: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算法?相关推荐

  1. 漫画:如何破解MD5算法

    转载自 玻璃猫 程序员小灰 在之前的漫画中,我们介绍了MD5算法的基本概念和底层原理,没看过的小伙伴们可以点击下面的链接:<漫画:什么是MD5算法?> 这一次,我们来讲解如何破解MD5算法 ...

  2. 安全架构-md5算法介绍

    安全架构-md5算法介绍 安全架构知识,我们必不可少离不开的就是md5,包括接口签名,文件摘要,密码加密等等.本文介绍md5算法. 文章目录 安全架构-md5算法介绍 一.md5是什么? 二.特点 三 ...

  3. 漫画:什么是MD5算法?

    来自:梦见(微信号:dreamsee321) 摘要哈希生成的正确姿势是什么样呢?分三步: 1.收集相关业务参数,在这里是金额和目标账户.当然,实际应用中的参数肯定比这多得多,这里只是做了简化. 2.按 ...

  4. MD5算法可以破解么?为什么?网上有在线破解是怎么回事?

    答:MD5算法不可以破解. 因为MD5是单向散列函数,输入任意长度的信息,经过处理,输出为128位的信息:不同的输入得到的不同的结果:根据128位的输出结果不可能反推出输入的信息.所以不能从密文(散列 ...

  5. (摘录)MD5算法研究与破解

    md5的全称是message-digest algorithm 5(信息-摘要算法),在90年代初由mit laboratory for computer science和rsa data secur ...

  6. MD5算法已经被破解

    MD5算法已经被破解 发表: babyfrog 时间: 2004/09/04 19:55:19 发信人: bluemyosotis (抽筋的天使), 信区: SDU 标 题: 密码学领域重大发现:山东 ...

  7. 石破天惊! MD5算法被破解!

    按:MD5不安全了?SHA不安全了?HASH完了?一大早来到办公室,无意中看到这么一条新闻,继而在网上搜索了一个多小时,没有找到王教授这篇文章的原文.只看到山大几十分钟前发表的这篇新闻.期待各位IT同 ...

  8. 彩虹表破解开机密码、MD5算法等的原理

    http://www.91ri.org/7593.html  自己发到91ri的,博客备份下. 前言 或许对于大多数人来说,实际中并不需要了解这些理论,能够使用现成的工具就行,但是我个人觉得了解了这些 ...

  9. 漫画:什么是MD5算法

    转载自 玻璃猫 程序员小灰 摘要哈希生成的正确姿势是什么样呢?分三步: 1.收集相关业务参数,在这里是金额和目标账户.当然,实际应用中的参数肯定比这多得多,这里只是做了简化. 2.按照规则,把参数名和 ...

最新文章

  1. 报表 表格间距_从易读性和易操作性两大方面,教你做好表格设计
  2. 【练习】ViewPager标签滑动
  3. [文摘20071113]十四项心理定律
  4. JS生成x到y的随机数
  5. linux编译动态库之-fPIC
  6. netty在项目中实际使用_聚合氯化铝在实际使用中的用法和用量
  7. linux内核head.S文件分析
  8. java 从excel中读取数据_java如何从excel中读出数据
  9. php 返回mp3,当从PHP提供mp3时,audio.duration在Safari上返回Infinity
  10. “吸才”的字节跳动和“散才”的好未来
  11. netstat mysql_mysql-netstat
  12. kubenetes 1.4的Master节点克隆并改造为node节点以及node查询问题解决
  13. DSSM,Deep Structured Semantic Models
  14. isupper函数python_python字符串是否是大写-python 字符串大写-python isupper函数-python isupper函数未定义-嗨客网...
  15. MacOS删除开机启动项
  16. 基于springBoot+MyBatis+Vue的前后端分离旅游管理系统
  17. C++学习笔记:实现向量类的加减赋值运算,重载运算符
  18. 后台启动elastisearch-head,避免后台启动es head在关闭shell后es head自动关闭,网上一大堆错误的,这个是正解,来自互联网
  19. 一个For语句导致死循环的例子
  20. Eureka健康检查

热门文章

  1. CocosCreator优化之DrawCall漫谈
  2. 【矩阵论】内积空间与等距变换(1)
  3. ubuntu 16.04搭建OpenGrok
  4. radial-gradient
  5. 达芬奇官方的高配LINUX工作站指导,独家达芬奇调色工作站选购指南.doc
  6. 网页的一个页面中显示另一个页面
  7. 单片机:按键控制两位数码管
  8. 2022抖音私信名片系统源码+链接跳转引流技术
  9. 如何破解计算机拒绝访问u盘,高手应对U盘拒绝访问有绝招
  10. 3孔融分梨 4分 函数c语言,孔融分梨有绝招