破解MD5加密

本文摘自漫画戏说:如何破解MD5加密算法TOMORROW星辰

前言

这里所谓的破解并非是要把摘要还原成原文。因为MD5算法是用有穷的128位表示无穷的原文。对于MD5的破解,实际上都属于碰撞,比如原文A可以 通过MD5生成摘要M,我们只要找到生成同样摘要的原文B,此时B就是其中一个破解结果。

MD5破解原理都是利用了,被加密的数据与MD5加密算法所 生成的哈 希值并不是一 一对应的关系,而是多对一,也就是 说不同的数据经过MD5加密算法处理后,可能生成同样的MD5哈希值。通过碰撞寻找可以生成相同的哈希值的数据来实现破解。

此文介绍暴力枚举法、字典法、彩虹表法三种破解MD5加密算法的方法。

暴力枚举法

顾名思义,就是简单粗暴地枚举所有原文,并计算出哈希值,看哪个哈希值和给定的信息摘要一致。方法简单,但时间复杂度极高。仅仅长度只有8位的密码就约有两百亿的排列组合。

字典法

如果说暴力枚举是以时间换空间,那么字典法就是以空间换时间,黑客利用一个巨大的字典存储尽可能多的原文和信息摘要,即可快速找到碰撞结果。但是生成字典也需要巨大的空间。

彩虹表法

H(x)生成信息摘要的哈希函数。如MD5,如SHA256。
R(x)由信息摘要转换成另一个字符串的衰减函数 (Reduction)。其中R(x) 的定义域是H(x) 的值域,R(x) 的值域是H(x) 的定义 域。但是R(x)并不是H(x)的反函数。
通过交替运算H和R若干次,可以形成一个原文和哈希值的链条。哈希链条代表了一组映射关系。假设M是6个字符的密码集合,而哈希值有32位长,那么他们形成的长链如下:

破解MD5加密_第1张图片
假设H(x),R(x)交替重复K次,那么这个链条长度就是2K+1,我们只需要把链表的首端和末端存入哈希表中。

演示一次:
给定信息摘要: 920ECF10
如何得到原文呢?只需进行R (X )运算:
R ( 920ECF10 ) = kiebgt
查询哈希表可以找到末端kiebgt对应的首端是aaaaa ,因此摘要920ECF10的原文”极有可能"在aaaa到kiebgt的这个链条当中。
接下来从aaaaaa开始,重新交替运算R( X)与H(X) ,看看摘要值
920ECF10是否是其中一-次H( X)的结果。从链条看来,答案是肯定的,因此920ECF 10的原文就是920ECF 10的前置节点sgfnyd。
如果经过一次R(x)运算,结果却在表中找不到可以继续交替H(x)R(x)直到第K次。
破解MD5加密_第2张图片
破解MD5加密_第3张图片
R(x)的碰撞问题:当K值较大的时候,哈希链很长,一旦两条不同的哈希链在某个节点出现碰撞,后面所有的明文和哈希值全都变成了一 毛一样的值。这样造成的结果就是冗余存储。

此时彩虹表隆重登场。
彩虹表对哈希链进行了改进,把原先的R (X)函数改进成从R1 (X) 到Rk (X) - -共k个衰减函数。这样一来虽然也可能发生碰撞,但是碰撞只会发生在同- -级运算,如R1和R1碰撞,R3和R3碰撞,大大减小了存储重复的几率。每一步运算都是一种不同的函数,像图中的彩虹一样。
破解MD5加密_第4张图片
建议去看文章开头的po出的漫画,通俗易懂,适合像我一样的小白 。欢迎批评指正!![/撒花]

你可能感兴趣的:(破解MD5加密)