简述md5算法的具体过程
MD5算法的具体过程如下
1、填充消息
我们需要将信息补充到512的倍数(也就是64字节)。填充一个1再填充0,使得消息的长度对512取余为448.
举例:比如原来的消息长度是64字节,那么填充的长度就是448-64.也就是384字节,使得长度为448字节。
2、 初始化MD缓冲区
MD5的嘻哈值是128位,我们按照32位一组,那么就可以分为4个组别,分别是A、B、C、D。经过演练就可以得到,初始值可以自定义。
假如将MD缓冲区初始化为以下的值:
A = 0x67452301
B = 0xefcdab89
C = 0x98badcfe
D = 0x10325476
3、处理消息块的结果
对于每一个消息块(512位的)。都会执行下面4步:
(1)将缓冲区的4个变量复制到临时变量的abcd中。
(2)对于每一个512的消息,都会使用64位的函数F来处理(下面会讲到),这个函数是用来对他们进行压缩用的。
(3)将F的结果abcd变量累计相加,得到新的ABCD
(4)将ABCD赋值给缓冲区的abcd四个变量。
经过一定的消息块处理,最后缓冲区的四个变量就是MD5算法得出的结果。
关于压缩函数F
MD5的核心就是一个循环运算算法,它由rounds 4轮一共64步组成,每一轮都由16个步骤。它们分别用到不同的非线性函数和加法常数,其中在每一步都必须下面4个步骤:
(1)将消息块分组按照允许民命为F0、F1....F15.
(2)复制缓冲区的4个变量到abcd当中。
(3)根据当前的轮数选择不同的非线性函数F\G\I计算出T值
(4)将T和abcd当中的其中任意一个相加。你就会得到新的变量ABCD。并且更新到缓冲区。
具体实现如下:
i在0到15之间时:
T = (B & C) | ((~B) & D)
F = B ^ C ^ D
i在16到31之间时:
T = (D & B) | ((~D) & C)
F = (5 * i + 1) mod 16
i在32到47之间时:
T = B ^ C ^ D
F = (3 * i + 5) mod 16
i在48到63之间时:
T = C ^ (B | (~D))
F = (7 * i) mod 16
说明:符号“&”表示按照位逻辑和运算。“|”代表按位逻辑或运算,“~”代表按位取反运算,MOD代表取余运算.
版权所属:SO JSON在线解析
原文地址:https://www.sojson.com/blog/401.html
转载时必须以链接形式注明原始出处及本声明。
如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。