在ASP中使用MD5函数

VB中的程序  
    
          Dim   clsEncode   As   clsMD5  
            
          Set   clsEncode   =   New   clsMD5  
            
          f_Encode   =   clsEncode.DigestStrToHexStr(strText)  



MD5的函数:  
  <%@   Language=VBScript   %>  
  <%  
  'Test:  
  'MD5("")   =   d41d8cd98f00b204e9800998ecf8427e  
  'MD5   ("a")   =   0cc175b9c0f1b6a831c399e269772661  
  'MD5   ("abc")   =   900150983cd24fb0d6963f7d28e17f72  
  'MD5("message   digest")   =   f96b697d7cb7938d525a2f31aaf161d0  
  'MD5("abcdefghijklmnopqrstuvwxyz")   =   c3fcd3d76192e4007dfb496cca67e13b  
  'MD5("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")   =   d174ab98d277d9f5a5611c2c9f419d9f  
  'MD5   ("12345678901234567890123456789012345678901234567890123456789012345678901234567890")   =   57edf4a22be3c955ac49da2e2107b67a  
    
  'Option   Explicit  
    
  private   Const   BITS_TO_A_BYTE   =   8  
  private   Const   BYTES_TO_A_WORD   =   4  
  private   Const   BITS_TO_A_WORD   =   32  
    
  class   MD5Class  
  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  
          LShift   =   ((lValue   And   m_lOnBits(31   -   iShiftBits))   *   m_l2Power(iShiftBits))  
  End   If  
  End   Function  
    
  Private   Function   RShift(lValue,   iShiftBits)  
  If   iShiftBits   =   0   Then  
          RShift   =   lValue  
          Exit   Function  
  ElseIf   iShiftBits   =   31   Then  
          If   lValue   And   &H80000000   Then  
                  RShift   =   1  
          Else  
                  RShift   =   0  
          End   If  
          Exit   Function  
  ElseIf   iShiftBits   <   0   or   iShiftBits   >   31   Then  
          Err.Raise   6  
  End   If  
    
  RShift   =   (lValue   And   &H7FFFFFFE)   \   m_l2Power(iShiftBits)  
    
  If   (lValue   And   &H80000000)   Then  
          RShift   =   (RShift   or   (&H40000000   \   m_l2Power(iShiftBits   -   1)))  
  End   If  
  End   Function  
    
  Private   Function   RotateLeft(lValue,   iShiftBits)  
  RotateLeft   =   LShift(lValue,   iShiftBits)   or   RShift(lValue,   (32   -   iShiftBits))  
  End   Function  
    
  Private   Function   AddUnsigned(lX,   lY)  
  Dim   lX4  
  Dim   lY4  
  Dim   lX8  
  Dim   lY8  
  Dim   lResult  
    
  lX8   =   lX   And   &H80000000  
  lY8   =   lY   And   &H80000000  
  lX4   =   lX   And   &H40000000  
  lY4   =   lY   And   &H40000000  
    
  lResult   =   (lX   And   &H3FFFFFFF)   +   (lY   And   &H3FFFFFFF)  
    
  If   lX4   And   lY4   Then  
  lResult   =   lResult   Xor   &H80000000   Xor   lX8   Xor   lY8  
  ElseIf   lX4   or   lY4   Then  
  If   lResult   And   &H40000000   Then  
  lResult   =   lResult   Xor   &HC0000000   Xor   lX8   Xor   lY8  
  Else  
  lResult   =   lResult   Xor   &H40000000   Xor   lX8   Xor   lY8  
  End   If  
  Else  
  lResult   =   lResult   Xor   lX8   Xor   lY8  
  End   If  
    
  AddUnsigned   =   lResult  
  End   Function  
    
  Private   Function   md5_F(x,   y,   z)  
  md5_F   =   (x   And   y)   or   ((Not   x)   And   z)  
  End   Function  
    
  Private   Function   md5_G(x,   y,   z)  
  md5_G   =   (x   And   z)   or   (y   And   (Not   z))  
  End   Function  
    
  Private   Function   md5_H(x,   y,   z)  
  md5_H   =   (x   Xor   y   Xor   z)  
  End   Function  
    
  Private   Function   md5_I(x,   y,   z)  
  md5_I   =   (y   Xor   (x   or   (Not   z)))  
  End   Function  
    
  Private   Sub   md5_FF(a,   b,   c,   d,   x,   s,   ac)  
  a   =   AddUnsigned(a,   AddUnsigned(AddUnsigned(md5_F(b,   c,   d),   x),   ac))  
  a   =   RotateLeft(a,   s)  
  a   =   AddUnsigned(a,   b)  
  End   Sub  
    
  Private   Sub   md5_GG(a,   b,   c,   d,   x,   s,   ac)  
  a   =   AddUnsigned(a,   AddUnsigned(AddUnsigned(md5_G(b,   c,   d),   x),   ac))  
  a   =   RotateLeft(a,   s)  
  a   =   AddUnsigned(a,   b)  
  End   Sub  
    
  Private   Sub   md5_HH(a,   b,   c,   d,   x,   s,   ac)  
  a   =   AddUnsigned(a,   AddUnsigned(AddUnsigned(md5_H(b,   c,   d),   x),   ac))  
  a   =   RotateLeft(a,   s)  
  a   =   AddUnsigned(a,   b)  
  End   Sub  
    
  Private   Sub   md5_II(a,   b,   c,   d,   x,   s,   ac)  
  a   =   AddUnsigned(a,   AddUnsigned(AddUnsigned(md5_I(b,   c,   d),   x),   ac))  
  a   =   RotateLeft(a,   s)  
  a   =   AddUnsigned(a,   b)  
  End   Sub  
    
  Private   Function   ConvertToWordArray(sMessage)  
  Dim   lMessageLength  
  Dim   lNumberOfWords  
  Dim   lWordArray()  
  Dim   lBytePosition  
  Dim   lByteCount  
  Dim   lWordCount  
    
  Const   MODULUS_BITS   =   512  
  Const   CONGRUENT_BITS   =   448  
    
  lMessageLength   =   Len(sMessage)  
    
  lNumberOfWords   =   (((lMessageLength   +   ((MODULUS_BITS   -   CONGRUENT_BITS)   \   BITS_TO_A_BYTE))   \   (MODULUS_BITS   \   BITS_TO_A_BYTE))   +   1)   *   (MODULUS_BITS   \   BITS_TO_A_WORD)  
  ReDim   lWordArray(lNumberOfWords   -   1)  
    
  lBytePosition   =   0  
  lByteCount   =   0  
  Do   Until   lByteCount   >=   lMessageLength  
          lWordCount   =   lByteCount   \   BYTES_TO_A_WORD  
          lBytePosition   =   (lByteCount   Mod   BYTES_TO_A_WORD)   *   BITS_TO_A_BYTE  
          lWordArray(lWordCount)   =   lWordArray(lWordCount)   or   LShift(Asc(Mid(sMessage,   lByteCount   +   1,   1)),   lBytePosition)  
          lByteCount   =   lByteCount   +   1  
  Loop  
    
  lWordCount   =   lByteCount   \   BYTES_TO_A_WORD  
  lBytePosition   =   (lByteCount   Mod   BYTES_TO_A_WORD)   *   BITS_TO_A_BYTE  
    
  lWordArray(lWordCount)   =   lWordArray(lWordCount)   or   LShift(&H80,   lBytePosition)  
    
  lWordArray(lNumberOfWords   -   2)   =   LShift(lMessageLength,   3)  
  lWordArray(lNumberOfWords   -   1)   =   RShift(lMessageLength,   29)  
    
  ConvertToWordArray   =   lWordArray  
  End   Function  
    
  Private   Function   WordToHex(lValue)  
  Dim   lByte  
  Dim   lCount  
    
  For   lCount   =   0   To   3  
          lByte   =   RShift(lValue,   lCount   *   BITS_TO_A_BYTE)   And   m_lOnBits(BITS_TO_A_BYTE   -   1)  
          WordToHex   =   WordToHex   &   Right("0"   &   Hex(lByte),   2)  
  Next  
  End   Function  







  Public   Function   MD5(sMessage)  
  m_lOnBits(0)   =   clng(1)  
  m_lOnBits(1)   =   clng(3)  
  m_lOnBits(2)   =   clng(7)  
  m_lOnBits(3)   =   clng(15)  
  m_lOnBits(4)   =   clng(31)  
  m_lOnBits(5)   =   clng(63)  
  m_lOnBits(6)   =   clng(127)  
  m_lOnBits(7)   =   clng(255)  
  m_lOnBits(8)   =   clng(511)  
  m_lOnBits(9)   =   clng(1023)  
  m_lOnBits(10)   =   clng(2047)  
  m_lOnBits(11)   =   clng(4095)  
  m_lOnBits(12)   =   clng(8191)  
  m_lOnBits(13)   =   clng(16383)  
  m_lOnBits(14)   =   clng(32767)  
  m_lOnBits(15)   =   clng(65535)  
  m_lOnBits(16)   =   clng(131071)  
  m_lOnBits(17)   =   clng(262143)  
  m_lOnBits(18)   =   clng(524287)  
  m_lOnBits(19)   =   clng(1048575)  
  m_lOnBits(20)   =   clng(2097151)  
  m_lOnBits(21)   =   clng(4194303)  
  m_lOnBits(22)   =   clng(8388607)  
  m_lOnBits(23)   =   clng(16777215)  
  m_lOnBits(24)   =   clng(33554431)  
  m_lOnBits(25)   =   clng(67108863)  
  m_lOnBits(26)   =   clng(134217727)  
  m_lOnBits(27)   =   clng(268435455)  
  m_lOnBits(28)   =   clng(536870911)  
  m_lOnBits(29)   =   clng(1073741823)  
  m_lOnBits(30)   =   clng(2147483647)  
    
  m_l2Power(0)   =   clng(1)  
  m_l2Power(1)   =   clng(2)  
  m_l2Power(2)   =   clng(4)  
  m_l2Power(3)   =   clng(8)  
  m_l2Power(4)   =   clng(16)  
  m_l2Power(5)   =   clng(32)  
  m_l2Power(6)   =   clng(64)  
  m_l2Power(7)   =   clng(128)  
  m_l2Power(8)   =   clng(256)  
  m_l2Power(9)   =   clng(512)  
  m_l2Power(10)   =   clng(1024)  
  m_l2Power(11)   =   clng(2048)  
  m_l2Power(12)   =   clng(4096)  
  m_l2Power(13)   =   clng(8192)  
  m_l2Power(14)   =   clng(16384)  
  m_l2Power(15)   =   clng(32768)  
  m_l2Power(16)   =   clng(65536)  
  m_l2Power(17)   =   clng(131072)  
  m_l2Power(18)   =   clng(262144)  
  m_l2Power(19)   =   clng(524288)  
  m_l2Power(20)   =   clng(1048576)  
  m_l2Power(21)   =   clng(2097152)  
  m_l2Power(22)   =   clng(4194304)  
  m_l2Power(23)   =   clng(8388608)  
  m_l2Power(24)   =   clng(16777216)  
  m_l2Power(25)   =   clng(33554432)  
  m_l2Power(26)   =   clng(67108864)  
  m_l2Power(27)   =   clng(134217728)  
  m_l2Power(28)   =   clng(268435456)  
  m_l2Power(29)   =   clng(536870912)  
  m_l2Power(30)   =   clng(1073741824)  
    
    
  Dim   x  
  Dim   k  
  Dim   AA  
  Dim   BB  
  Dim   CC  
  Dim   DD  
  Dim   a  
  Dim   b  
  Dim   c  
  Dim   d  
    
  Const   S11   =   7  
  Const   S12   =   12  
  Const   S13   =   17  
  Const   S14   =   22  
  Const   S21   =   5  
  Const   S22   =   9  
  Const   S23   =   14  
  Const   S24   =   20  
  Const   S31   =   4  
  Const   S32   =   11  
  Const   S33   =   16  
  Const   S34   =   23  
  Const   S41   =   6  
  Const   S42   =   10  
  Const   S43   =   15  
  Const   S44   =   21  
    
  x   =   ConvertToWordArray(sMessage)  
    
  a   =   &H67452301  
  b   =   &HEFCDAB89  
  c   =   &H98BADCFE  
  d   =   &H10325476  
    
  For   k   =   0   To   UBound(x)   Step   16  
  AA   =   a  
  BB   =   b  
  CC   =   c  
  DD   =   d  
    
  md5_FF   a,   b,   c,   d,   x(k   +   0),   S11,   &HD76AA478  
  md5_FF   d,   a,   b,   c,   x(k   +   1),   S12,   &HE8C7B756  
  md5_FF   c,   d,   a,   b,   x(k   +   2),   S13,   &H242070DB  
  md5_FF   b,   c,   d,   a,   x(k   +   3),   S14,   &HC1BDCEEE  
  md5_FF   a,   b,   c,   d,   x(k   +   4),   S11,   &HF57C0FAF  
  md5_FF   d,   a,   b,   c,   x(k   +   5),   S12,   &H4787C62A  
  md5_FF   c,   d,   a,   b,   x(k   +   6),   S13,   &HA8304613  
  md5_FF   b,   c,   d,   a,   x(k   +   7),   S14,   &HFD469501  
  md5_FF   a,   b,   c,   d,   x(k   +   8),   S11,   &H698098D8  
  md5_FF   d,   a,   b,   c,   x(k   +   9),   S12,   &H8B44F7AF  
  md5_FF   c,   d,   a,   b,   x(k   +   10),   S13,   &HFFFF5BB1  
  md5_FF   b,   c,   d,   a,   x(k   +   11),   S14,   &H895CD7BE  
  md5_FF   a,   b,   c,   d,   x(k   +   12),   S11,   &H6B901122  
  md5_FF   d,   a,   b,   c,   x(k   +   13),   S12,   &HFD987193  
  md5_FF   c,   d,   a,   b,   x(k   +   14),   S13,   &HA679438E  
  md5_FF   b,   c,   d,   a,   x(k   +   15),   S14,   &H49B40821  
    
  md5_GG   a,   b,   c,   d,   x(k   +   1),   S21,   &HF61E2562  
  md5_GG   d,   a,   b,   c,   x(k   +   6),   S22,   &HC040B340  
  md5_GG   c,   d,   a,   b,   x(k   +   11),   S23,   &H265E5A51  
  md5_GG   b,   c,   d,   a,   x(k   +   0),   S24,   &HE9B6C7AA  
  md5_GG   a,   b,   c,   d,   x(k   +   5),   S21,   &HD62F105D  
  md5_GG   d,   a,   b,   c,   x(k   +   10),   S22,   &H2441453  
  md5_GG   c,   d,   a,   b,   x(k   +   15),   S23,   &HD8A1E681  
  md5_GG   b,   c,   d,   a,   x(k   +   4),   S24,   &HE7D3FBC8  
  md5_GG   a,   b,   c,   d,   x(k   +   9),   S21,   &H21E1CDE6  
  md5_GG   d,   a,   b,   c,   x(k   +   14),   S22,   &HC33707D6  
  md5_GG   c,   d,   a,   b,   x(k   +   3),   S23,   &HF4D50D87  
  md5_GG   b,   c,   d,   a,   x(k   +   8),   S24,   &H455A14ED  
  md5_GG   a,   b,   c,   d,   x(k   +   13),   S21,   &HA9E3E905  
  md5_GG   d,   a,   b,   c,   x(k   +   2),   S22,   &HFCEFA3F8  
  md5_GG   c,   d,   a,   b,   x(k   +   7),   S23,   &H676F02D9  
  md5_GG   b,   c,   d,   a,   x(k   +   12),   S24,   &H8D2A4C8A  
    
  md5_HH   a,   b,   c,   d,   x(k   +   5),   S31,   &HFFFA3942  
  md5_HH   d,   a,   b,   c,   x(k   +   8),   S32,   &H8771F681  
  md5_HH   c,   d,   a,   b,   x(k   +   11),   S33,   &H6D9D6122  
  md5_HH   b,   c,   d,   a,   x(k   +   14),   S34,   &HFDE5380C  
  md5_HH   a,   b,   c,   d,   x(k   +   1),   S31,   &HA4BEEA44  
  md5_HH   d,   a,   b,   c,   x(k   +   4),   S32,   &H4BDECFA9  
  md5_HH   c,   d,   a,   b,   x(k   +   7),   S33,   &HF6BB4B60  
  md5_HH   b,   c,   d,   a,   x(k   +   10),   S34,   &HBEBFBC70  
  md5_HH   a,   b,   c,   d,   x(k   +   13),   S31,   &H289B7EC6  
  md5_HH   d,   a,   b,   c,   x(k   +   0),   S32,   &HEAA127FA  
  md5_HH   c,   d,   a,   b,   x(k   +   3),   S33,   &HD4EF3085  
  md5_HH   b,   c,   d,   a,   x(k   +   6),   S34,   &H4881D05  
  md5_HH   a,   b,   c,   d,   x(k   +   9),   S31,   &HD9D4D039  
  md5_HH   d,   a,   b,   c,   x(k   +   12),   S32,   &HE6DB99E5  
  md5_HH   c,   d,   a,   b,   x(k   +   15),   S33,   &H1FA27CF8  
  md5_HH   b,   c,   d,   a,   x(k   +   2),   S34,   &HC4AC5665  
    
  md5_II   a,   b,   c,   d,   x(k   +   0),   S41,   &HF4292244  
  md5_II   d,   a,   b,   c,   x(k   +   7),   S42,   &H432AFF97  
  md5_II   c,   d,   a,   b,   x(k   +   14),   S43,   &HAB9423A7  
  md5_II   b,   c,   d,   a,   x(k   +   5),   S44,   &HFC93A039  
  md5_II   a,   b,   c,   d,   x(k   +   12),   S41,   &H655B59C3  
  md5_II   d,   a,   b,   c,   x(k   +   3),   S42,   &H8F0CCC92  
  md5_II   c,   d,   a,   b,   x(k   +   10),   S43,   &HFFEFF47D  
  md5_II   b,   c,   d,   a,   x(k   +   1),   S44,   &H85845DD1  
  md5_II   a,   b,   c,   d,   x(k   +   8),   S41,   &H6FA87E4F  
  md5_II   d,   a,   b,   c,   x(k   +   15),   S42,   &HFE2CE6E0  
  md5_II   c,   d,   a,   b,   x(k   +   6),   S43,   &HA3014314  
  md5_II   b,   c,   d,   a,   x(k   +   13),   S44,   &H4E0811A1  
  md5_II   a,   b,   c,   d,   x(k   +   4),   S41,   &HF7537E82  
  md5_II   d,   a,   b,   c,   x(k   +   11),   S42,   &HBD3AF235  
  md5_II   c,   d,   a,   b,   x(k   +   2),   S43,   &H2AD7D2BB  
  md5_II   b,   c,   d,   a,   x(k   +   9),   S44,   &HEB86D391  
    
  a   =   AddUnsigned(a,   AA)  
  b   =   AddUnsigned(b,   BB)  
  c   =   AddUnsigned(c,   CC)  
  d   =   AddUnsigned(d,   DD)  
  Next  
    
  MD5   =   LCase(WordToHex(a)   &   WordToHex(b)   &   WordToHex(c)   &   WordToHex(d))  
  '   MD5=LCase(WordToHex(b)   &   WordToHex(c))   'I   crop   this   to   fit   16byte   database   password   :D  
  End   Function  
  end   class  
  %>  
  <%  
  dim   mdx,strtemp  
  set   mdx=new   MD5Class  
  strtemp="abcdefghijklmnopqrstuvwxyz"  
  response.write   mdx.md5(strtemp)  
  response.write   "<br>"  
  strtemp="aaa"  
  response.write   mdx.md5(strtemp)  
  response.write   "***********aaaaaaaaaaaa<p>"  
  %>  
  <pre>  
    
  ec23c10d5e7627fd65185385c0b4d33f  
    
  MD5   ("")   =   d41d8cd98f00b204e9800998ecf8427e  
  MD5   ("a")   =   0cc175b9c0f1b6a831c399e269772661  
  MD5   ("abc")   =   900150983cd24fb0d6963f7d28e17f72  
  MD5   ("abcdefghijklmnopqrstuvwxyz")   =   c3fcd3d76192e4007dfb496cca67e13b  
  MD5   ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")   =d174ab98d277d9f5a5611c2c9f419d9f  
  MD5   ("12345678901234567890123456789012345678901234567890123456789012345678901234567890")   =   57edf4a22be3c955ac49da2e2107b67a  
  </pre>



文章来自: 转载
引用通告: 查看所有引用 | 我要引用此文章
Tags: MD5
评论: 0 | 引用: 0 | 查看次数: 6583
发表评论
昵 称:
密 码: 游客发言不需要密码.
验证码: 验证码
内 容:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 2000 字 | UBB代码 开启 | [img]标签 关闭