枫林在线论坛>>信息安全 [管理模式] [快速回复] [推荐给朋友]
[59623] 主题: MD5算法说明
作者: leaflet 标题:  MD5算法说明[转载]
昵称: Leaf 来自: 218.80.*.* 详细
经验值: 56183 发贴时间: 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、输出结果。

========== * * * * * ==========
Top

| 用户注册 | 在线用户 | 投票中心 | 常见问题 |

Copyright © 2001-2012 枫林在线(www.FengLin.info) All Rights Reserved
页面运行使用29.82毫秒