MD5算法实现原理

  • Post author:
  • Post category:其他

最近知道了一个加密算法,在校验文件、验证签名安全等很有用。整理一下关于MD5的相关知识。

(我不是知识的创造者,我只是知识的搬运工╭(●`∀´●)╯)

MD5消息摘要算法

(MD5 Message-Digest Algorithm)

是一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。

 

MD5算法的实现原理

1. 附加填充位 

首先,我们计算出原文长度(bit)对 512 求余的结果,如果不等于 448,就需要填充原文使得原文对 512 求余的结果等于 448。填充的方法是第一位填充 1,其余位填充 0。填充完后,信息的长度就是 512*N+448。

2. 补足长度 

之后,用剩余的位置(512-448=64 位)记录原文的真正长度,把长度的二进制值补在最后。这样处理后的信息长度就是 512*(N+1)。  

3. 初始化MD缓存器

MD5运算要用到一个128位的MD5缓存器,用来保存中间变量和最终结果。该缓存器又可看成是4个32位的寄存器A、B、C、D,初始化为:

寄存器 初始化
A 01 23 45 67
B 89 ab cd ef
C fe dc ba 98
D 76 54 32 10

4. 处理数据段

首先定义4个非线性函数F、G、H、I,对输入的报文运算以512位数据段为单位进行处理。

对每个数据段都要进行4轮的逻辑处理,在4轮中分别使用4个不同的函数F、G、H、I。每一轮以ABCD和当前的512位的块为输入,处理后送入ABCD(128位)

从上面的步骤可以看出,MD5算法的加密过程是很复杂的,那么,使用MD5加密过的信息有没有可能被破解呢?

答案是肯定的,任何事情都不是绝对的。

由于MD5值总数有限,等文件数量足够多的时,可能会产生两个不相同的文件MD5值相同的情况。

漫画图解:如果破解MD5加密算法。(这个人写的很好呢,分享给大家!)

 


版权声明:本文为H_Expect原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。