一聚教程网:一个值得你收藏的教程网站

热门教程

MD5算法说明(转)

时间:2022-07-02 23:52:04 编辑:袖梨 来源:一聚教程网

MD5算法说明
1、MD5算法是对输入的数据进行补位,使得如果数据位长度LEN对512求余的结果是448。
    即数据扩展至K*512+448位。即K*64+56个字节,K为整数。
    具体补位操作:补一个1,然后补0至满足上述要求
2、补数据长度:
    用一个64位的数字表示数据的原始长度B,把B用两个32位数表示。这时,数据就被填
    补成长度为512位的倍数。
3. 初始化MD5参数
    四个32位整数 (A,B,C,D) 用来计算信息摘要,初始化使用的是十六进制表示的数字
        A=0X01234567
        B=0X89abcdef
        C=0Xfedcba98
        D=0X76543210
4、处理位操作函数
        X,Y,Z为32位整数。
        F(X,Y,Z) = X&Y|NOT(X)&Z
        G(X,Y,Z) = X&Z|Y not(Z)
        H(X,Y,Z) = X xor Y xor Z
        I(X,Y,Z) = Y xor (X|not(Z))
5、主要变换过程:
    使用常数组T[1 ... 64], T[i]为32位整数用16进制表示,数据用16个32位的整
    数数组M[]表示。
    具体过程如下:
/* 处理数据原文 */
For i = 0 to N/16-1 do
/*每一次,把数据原文存放在16个元素的数组X中. */
For j = 0 to 15 do
Set X[j] to M[i*16+j].
end    /结束对J的循环
/* Save A as AA, B as BB, C as CC, and D as DD.
*/
AA = A
BB = B
CC = C
DD = D
/* 第1轮*/
/* 以 [abcd k s i]表示如下操作
a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
/* Do the following 16 operations. */
[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3
22 4]
[ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7

热门栏目