MD5算法
1.基础知识
1992年首次提出
摘要长度:128bit
任意长度的信息输入,MD5都将产生一个长度为128比特的输出
块大小:512bit(64字节)
每次以512位的分组来处理
轮计算:4(16 step)
共4轮计算,每轮计算16步,一共64步
2.md5算法原理
第一步:填充(Padding)
MD5算法是对输入的数据进行补位,使得如 果数据位长度lEN对512求余的结果是448,则数据扩展至
K×512+448位,即K×64+56个字节,K为整数。
黄色部分:消息
蓝色部分:10000000…0
绿色部分:原消息长度(共64位)512-448=64
要求:总长度为512bit的倍数
第二步:state(初始化MD5内部状态)
A,B,C,D分别位32位的寄存器,初始化使用的是十六进制表示的数字
第三步:四轮循环运算
将上面四个链接变量复制到另外四个变量中:A到a,B 到b,C到c,D到d。
四个轮函数:
可以借助这个图来理解
首先,B,C,D通过F(B,C,D)计算,计算结果与A相加
然后,再与Mi, ti相加,之后循环左移w位,再次和B相加
最后,对调DABC赋值给ABCD。
Mj表示消息的第j个子分组(0到15),每一个大小位32位,共32*16 = 512位
ti可以如下选择:在第i步中,ti是4294967296* abs(sin(i))的整数部分,i的单位是弧度,。(4294967296等于2的32次方),
F
F
(
a
,
b
,
c
,
d
,
M
j
,
w
,
t
i
)
表示
a
=
b
+
(
(
a
+
F
(
b
,
c
,
d
)
+
M
i
+
t
i
)
<
<
<
w
)
FF(a,b,c,d,Mj,w,ti)表示 a = b +((a+F(b,c,d)+Mi+ti)<<<w)
FF(a,b,c,d,Mj,w,ti)表示a=b+((a+F(b,c,d)+Mi+ti)<<<w)
G G ( a , b , c , d , M j , w , t i ) 表示 a = b + ( ( a + G ( b , c , d ) + M i + t i ) < < < w ) GG(a,b,c,d,Mj,w,ti)表示 a = b +((a+G(b,c,d)+Mi+ti)<<<w) GG(a,b,c,d,Mj,w,ti)表示a=b+((a+G(b,c,d)+Mi+ti)<<<w)
H H ( a , b , c , d , M j , w , t i ) 表示 a = b + ( ( a + H ( b , c , d ) + M i + t i ) < < < w ) HH(a,b,c,d,Mj,w,ti)表示 a = b +((a+H(b,c,d)+Mi+ti)<<<w) HH(a,b,c,d,Mj,w,ti)表示a=b+((a+H(b,c,d)+Mi+ti)<<<w)
I I ( a , b , c , d , M j , w , t i ) 表示 a = b + ( ( a + I ( b , c , d ) + M i + t i ) < < < w ) II(a,b,c,d,Mj,w,ti)表示 a = b +((a+I(b,c,d)+Mi+ti)<<<w) II(a,b,c,d,Mj,w,ti)表示a=b+((a+I(b,c,d)+Mi+ti)<<<w)
每一轮用一个函数,每一轮16步。一共四轮,共64步
第四步:拼接
每轮循环后,将A,B,C,D分别加上a,b,c,d。