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) = XYINOT[X] g(X.y.z) = XZIY?[Z] h(x.y.z) = X xor Y xor Z I(X.Y.Z) = X xor (XInot(z)) 5、主要变换过程: 使用常数组T[1......64].T[i]为32位整数用6进制表示.数据用16个32位的整数数组M[]表示. 具体过程如下: /*处理数据原文*/ For i = 0 to N /16-1 DO /*每一次 把数据原文存在16个元素的数组X中。*/ For i=0 to 15 do set X[i] 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 22 8] [ABCD 8 7 9][DABC 9 12 10][CDAB 10 17 11][BCDA 11 22 12] [ABCD 12 7 13][DABC 13 12 14][[CDAB 14 17 15][BCDA 15 22 16] /*第2轮****/ /* 以[ABCD K S I]表示如下操作 A =B+(((A+G(B,C,D)+[K]+t[i]<<<S).*/ /* do THE FOLLWING 16 OPERATIONS.*/ [abcd 1 5 17][DABc 6 9 18[cdab 11 14 19][bcda 0 20 20] [abcd 5 5 21][dabc 10 9 22][CDAB 15 14 23][BCDA 4 20 24] [ABCD 9 5 25][DABC 14 9 26][CDAB3 14 27][BCDA 4 20 24] [ABCD 13 5 29][DABC 2 9 30][CDAB 7 14 31][BCDA 12 20 32] 第三轮*/ /*[ABCD K S I] A=B+((A+h(B,C,D)x[K]+T[I]<<<S) [abcd 5 4 33][dabc 8 11 34][cdab 11 16 35][bcda 14 23 36] [abcd 1 4 37][dabc 4 11 38][cdab 7 16 39][bcda 10 23 40] [abcd 13 4 41][dabc 0 11 42][cdab 3 16 43][bcda 6 23 44] [avcd 9 4 45][dabc 12 11 46][cdab 15 16 47][bcda 2 25 48] 下来就是四了 A=A+AA B=B+BB C=C+CC D=D+DD END结束对i的循环 下来加密就结束了~输出的结果就是我们看不清楚的16位加密了 下来大家可以用这个试试~ <% ''''''''********************************************md5算法开始**************************************** ''''''''****** md5加密 ******** ********* Private Const BITS_TO_A_BYTE = 8 Private Const BYTES_TO_A_Word = 4 Private Const BITS_TO_A_word = 32 Private m_lOnBits(30) Private m_l2Power(30) Private Function LShift(lvalue, iShiftBits) If iShiftBits = 0 Then LShift = lvalue Exit Function ElseIf iShiftBits = 31 Then If lvalue And 1 Then LShift = &H80000000 Else LShift = 0 End If Exit Function ElseIf iShiftBits < 0 Or iShiftBits > 31 Then Err.Raise 6 End If If (lvalue And m_l2Power(31 - iShiftBits)) Then LShift = ((lvalue And m_lOnBits(31 - (iShiftBits + 1))) * m_l2Power(iShiftBits)) Or &H80000000 Else
复制本页网址和标题,发送给你QQ/Msn的好友一起分享
上一篇:COM 组件设计与应用之数据类型
下一篇:搭建Ruby on Rails开发环境