枫林在线论坛精华区>>信息安全 |
[59623] 主题: MD5算法说明 |
作者: leaflet (Leaf) | ||
标题: MD5算法说明[转载] | ||
来自: 218.80.*.* | ||
发贴时间: 2003年05月25日 16:55:04 | ||
长度: 1686字 | ||
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, T为32位整数用16进制表示,数据用16个32位的整 数数组M表示。 具体过程如下: /* 处理数据原文 */ For i = 0 to N/16-1 do /*每一次,把数据原文存放在16个元素的数组X中. */ For j = 0 to 15 do Set X to M. 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轮*/ /* 以 表示如下操作 a = b + ((a + F(b,c,d) + X + T) <<< s). */ /* Do the following 16 operations. */ /* 第2轮* */ /* 以 表示如下操作 a = b + ((a + G(b,c,d) + X + T) <<< s). */ /* Do the following 16 operations. */ /* 第3轮*/ /* 以 表示如下操作 a = b + ((a + H(b,c,d) + X + T) <<< s). */ /* Do the following 16 operations. */ /* 第4轮*/ /* 以 表示如下操作 a = b + ((a + I(b,c,d) + X + T) <<< s). */ /* Do the following 16 operations. */ /* 然后进行如下操作 */ A = A + AA B = B + BB C = C + CC D = D + DD end /* 结束对I的循环*/ 6、输出结果。 |
||
========== * * * * * ==========
|
返回 |