【正确答案】(1)补位
MD5算法是对输入的数据进行补位,使得数据位长度LEN对512求余的结果是448。即数据扩展至K*512+448位。即K*64+56个字节,K为整数。补位操作始终要执行,即使数据长度LEN对512求余的结果已是448。具体补位操作:补一个1,然后补0至满足上述要求。总共最少要补一位,最多补512位。
(2)补数据长度
用一个64位的数字表示数据的原始长度b,把b用两个32位数表示。那么只取b的低64位。当遇到b大于2^64这种极少遇到的情况时,这时,数据就被填补成长度为512位的倍数。也就是说,此时的数据长度是16个字(32位)的整数倍。用M[0……(N-1)]表示此时的数据,其中的N是16的倍数。
(3)初始化MD缓冲器
用一个四个字的缓冲器(A,B,C,D)来计算报文摘要,A,B,C,D分别是32位的寄存器,初始化使用的是十六进制表示的数字:
A=0X01234567;
B=0X89abcdef;
C=0Xfedcba98;
D=0X76543210。
(4)处理位操作函数
首先定义4个辅助函数,每个函数的输入是三个32位的字,输出是一个32位的字。
X,Y,Z为32位整数。
F(X,Y,Z)=XYvnot(X)Z
G(X,Y,Z)=XZvYnot(Z)
H(X,Y,Z)=XxorYxorZ
I(X,Y,Z)=Yxor(Xvnot(Z))
这一步中使用一个有64个元素的常数组T,它由sin函数构成,T[i]表示数组中的第i个元素,它的值等于经过4294967296次abs(sin(i))后的值的整数部分(其中i是弧度)。T[i]为32位整数*用十六进制表示。
(5)输出结果
报文摘要产生后的形式为:A,B,C,D。也就是低位字节从A开始,高位字节从D结束。
【答案解析】