最近知道了一个加密算法,在校验文件、验证签名安全等很有用。整理一下关于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加密算法。(这个人写的很好呢,分享给大家!)