MD5的概述

1.简介

MD5消息摘要算法是Ron Rivest开发的。MD5实际上根源于一系列消息的摘要算法。原先的消息摘要算法称为MD,很快进入下一版MD2,但很脆弱。因此,Ron Rivest开始开发MD3,结果失败了。后来,开发了MD4,但其结果还是很不理想,因此最终推出了MD5。
MD5速度很快,产生128位消息摘要。经过初始处理后,输入文本变成512位块,进一步分为16个32位块。这个算法的输出是4个32位块构成的集合,形成128位消息摘要。

2.MD5工作原理

2.1填充
MD5的第一步实在初始消息中增加填充位,目的使初始消息长度等于一个值,即比512位的倍数少64位。例如,如果初始消息长度为1000位,则要填充472位,使消息长度为1472位,因为1472+64=1536,是512的倍数。
这样,填充后,初始消息的长度为448位(比512少64位)、960位(比1024少64位)、1472位(比1536少64位),等等。
填充对用一个1位和多个0位。注意,填充总是要进行的,即使消息长度已经是比512的倍数少64。因此,如果消息长度已经是448位,则要填充512位,是长度变成960位,因此,填充长度为1~ 512位的值。
2.2添加长度
添加填充位后,下一步要计算消息原长,将其加进填充后的消息末尾。其工作流程如下:先计算消息长度,不包括填充位(即增加填充位前的长度)。例如,如果初始消息为1000位,则填充472位,使其变成比512的倍数少64位,但长度为1000,而不是1472。
这个消息原长表示为64位值,添加到加进填充后的消息末尾,如下图所示:
在这里插入图片描述
这是消息的长度为512位的倍数。注意,如果消息长度超过 2 64 2^{64} 264位,即64位无法表示,因为消息太长,则只用长度的低64位,即等于计算length mod 2 64 2^{64} 264
2.3 将输入分成512位的块
下面要将输入分成512位的块,如下图所示:
在这里插入图片描述
2.4 初始链接变量
这一步要初始化4个链接变量,分别称为A、B、C、D,都是32位数字。这些链接变量都是初始十六进制值,如下表所示:

链接变量十六进制值
A01 23 45 67
B89 AB CD EF
CFE DC BA 98
D76 54 32 10

2.5 处理块
初始化之后,就要开始实际的算法,这是一个循环,对消息中的多个512位块运行。其步骤如下:
第一步:将4个链接变量复制到4个变量a、b、c、d中,使a=A、b=B、c=C、d=D。实际上,这个算法将a、b、c、d组合成128位寄存器(abcd),寄存器(abcd)在实际算法运算中保存中间结果和最终结果,如下图所示:
在这里插入图片描述
第二步:将当前的512位块分解为16个子块,每个子块为32位。
第三步:这时有4轮,每一轮处理一个块的16位,每一轮的输入如下:(a)16个子块;(b)变量a、b、c、d;(c)常量t,如下图所示:
在这里插入图片描述
这4轮的第一步进行不同处理(即处理P处理bcd),其他步骤是相同的。每一轮有16个输入子块M[0],M[1],…,M[15],或表示为M[i],其中i位0~ 15,每个子块为32位。t是个常量数组,包含64个元素,每个元素32位。把数组t的元素表示为t[1],t[2],…,t[64],或t[k],其中k为1~64,由于有四轮,因此每一轮使用t值中的16个。
下面总结这四轮的迭代,每一轮的输出的中间和最终结果复制到寄存器abcd中,注意,每一轮有16个寄存器。
(1)处理P首先处理b、c、d。这个处理P在四轮中不同。
(2)变量a加进处理P的输出(即寄存器abcd)。
(3)消息子块M[i]加进第2步输出(即寄存器abcd)。
(4)常量t[k]加进第3步输出(即寄存器abcd)。
(5)第4步的输出(即寄存器abcd内容)循环左移S位(S值不断改变)。
(6)变量b加进第5步输出(即寄存器abcd)。
(7)第6步输出成为下一步的新abcd。
下图显示了MD5的操作过程:
在这里插入图片描述
可以用数学方法表示MD5操作过程:
a = b + ( ( a + P r o c e s s P ( b , c , d ) + M [ i ] + t [ k ] ) < < < S ) a=b+((a+Process P(b,c,d)+M[i]+t[k])<<<S) a=b+((a+ProcessP(b,c,d)+M[i]+t[k])<<<S)
其中,a、b、c、d为链接变量;Process P(P处理)为非线性运算;M[i]表示消息的第i个分组;t[k]为常量;<<<S表示循环左移S位。
2.6 处理P简介
处理P在4轮中是不同的。简单地说,处理P就是a、b、c、d的基本布尔运算,如下表所示:

轮次处理P
1(b AND c) OR ((NOT b) AND (b))
3b XOR c XOR d
2(b AND d) OR (c AND (NOT d))
4c XOR (b OR (NOT d))

注:每一轮只有P处理不同,所有其他步骤都是相同的,因此每一轮中替换处理P的实际细节,其余保持不变。
2.7 四轮运算
下表显示了4轮的迭代运算:

迭代abcdMst
1abcdM[0]7t[1]
2dabcM[1]12t[2]
3cdabM[2]17t[3]
4bcdaM[3]22t[4]
5abcdM[4]7t[5]
6dabcM[5]12t[6]
7cdabM[6]17t[7]
8bcdaM[7]22t[8]
9abcdM[8]7t[9]
10dabcM[9]12t[10]
11cdabM[10]17t[11]
12bcdaM[11]22t[12]
13abcdM[12]7t[13]
14dabcM[13]12t[14]
15cdabM[14]17t[15]
16bcdaM[15]22t[16]
迭代abcdMst
1abcdM[1]5t[17]
2dabcM[6]9t[18]
3cdabM11]14t[9]
4bcdaM[0]20t[20]
5abcdM[5]5t[21]
6dabcM[10]9t[22]
7cdabM[15]14t[23]
8bcdaM[4]20t[24]
9abcdM[9]5t[25]
10dabcM[14]9t[26]
11cdabM[3]14t[27]
12bcdaM[8]20t[28]
13abcdM[13]5t[29]
14dabcM[2]9t[30]
15cdabM[7]14t[31]
16bcdaM[2]20t[32]
迭代abcdMst
1abcdM[5]4t[33]
2dabcM[8]11t[34]
3cdabM11]16t[35]
4bcdaM[14]23t[36]
5abcdM[1]4t[37]
6dabcM[4]11t[38]
7cdabM[7]16t[39]
8bcdaM[10]23t[40]
9abcdM[13]4t[41]
10dabcM[0]11t[42]
11cdabM[3]16t[43]
12bcdaM[6]23t[44]
13abcdM[9]4t[45]
14dabcM[12]11t[46]
15cdabM[15]16t[47]
16bcdaM[2]23t[48]
迭代abcdMst
1abcdM[0]6t[49]
2dabcM[7]10t[50]
3cdabM[14]15t[51]
4bcdaM[5]21t[52]
5abcdM[12]6t[53]
6dabcM[3]10t[54]
7cdabM[10]15t[55]
8bcdaM[1]21t[56]
9abcdM[8]6t[57]
10dabcM[15]10t[58]
11cdabM[16]15t[59]
12bcdaM[13]21t[60]
13abcdM[4]6t[61]
14dabcM[11]10t[62]
15cdabM[2]15t[63]
16bcdaM[9]21t[64]

其中t的取值如下表所示:

t[i]t[i]t[i]t[i]
t[1]D76AA478t[17]F61E2562t[33]FFFA3942t[49]F4292244
t[2]E8C7B756t[18]C040B340t[34]8771F681t[50]432AFF97
t[3]242070DBt[19]265E5A51t[35]699D6122t[51]AB9423A7
t[4]C1BDCEEEt[20]E9B6C7AAt[36]FDE5380Ct[52]FC93A039
t[5]F57C0FAFt[21]D62F105Dt[37]A4BEEA44t[53]655B59C3
t[6]4787C62At[22]02441453t[38]4BDECFA9t[54]8F0CCC92
t[7]A8304613t[23]D8A1E681t[39]F6BB4B60t[55]FFEFF47D
t[8]FD469501t[24]E7D3FBC8t[40]BEBFBC70t[56]85845DD1
t[9]698098D8t[25]21E1CDE6t[41]289B7EC6t[57]6FA87E4F
t[10]8B44F7AFt[26]F4D50D87t[42]EAA127FAt[58]FE2CE6E0
t[11]FFFF5BB1t[27]F4D50D87t[43]D4EF3085t[59]A3014314
t[12]895CD7BEt[28]455A14EDt[44]04881D05t[60]4E0811A1
t[13]6B901122t[29]A9E3E905t[45]D9D4D039t[61]F7537E82
t[14]FD987193t[30]FCEFA3F8t[46]E6DB99E5t[62]BD3AF235
t[15]A679438Et[31]676F02D9t[47]1FA27CF8t[63]2AD7D2BB
t[16]49B40821t[32]8D2A4C8At[48]C4AC5665t[64]BE86D391
3.MD5与MD4

下表表示了MD5和MD4的关键差别:

特性MD4MD5
轮数34
常量t的使用所有迭代中相同所有迭代中不同
第2轮的处理P(b AND d) OR (b AND d) OR (c AND d)(b AND d) OR (c AND (NOT d)),更随机

此外,第2轮和第3轮访问子块的顺序也发生了改变,引入了更大的随机性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZhInen丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值