枫林在线论坛精华区>>信息安全
[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、输出结果。

========== * * * * * ==========
返回