MD5.asp 文件内容
<%
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 )
Dim Md5OLD
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 str2bin(varstr)
Dim varasc
Dim i
Dim varchar
Dim varlow
Dim varhigh
str2bin = ""
For i = 1 To Len (varstr)
varchar = mid (varstr,i, 1 )
varasc = Asc (varchar)
If varasc < 0 Then
varasc = varasc + 65535
End If
If varasc > 255 Then
varlow = Left ( Hex ( Asc (varchar)), 2 )
varhigh = right ( Hex ( Asc (varchar)), 2 )
str2bin = str2bin & chrB( " &H " & varlow) & chrB( " &H " & varhigh)
Else
str2bin = str2bin & chrB(AscB(varchar))
End If
Next
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
If Md5OLD = 1 Then
lMessageLength = Len (sMessage)
Else
lMessageLength = LenB(sMessage)
End If
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
If Md5OLD = 1 Then
lWordArray(lWordCount) = lWordArray(lWordCount) or LShift( Asc ( Mid (sMessage, lByteCount + 1 , 1 )), lBytePosition)
Else
lWordArray(lWordCount) = lWordArray(lWordCount) or LShift(AscB(MidB(sMessage, lByteCount + 1 , 1 )), lBytePosition)
End If
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,stype)
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
If Md5OLD = 1 Then
x = ConvertToWordArray(sMessage)
Else
x = ConvertToWordArray(str2bin(sMessage))
End If
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
if stype = 32 then
MD5 = LCase (WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d))
else
MD5 = LCase (WordToHex(b) & WordToHex(c)) ' I crop this to fit 16byte database password :D
end if
End Function
%>
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 )
Dim Md5OLD
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 str2bin(varstr)
Dim varasc
Dim i
Dim varchar
Dim varlow
Dim varhigh
str2bin = ""
For i = 1 To Len (varstr)
varchar = mid (varstr,i, 1 )
varasc = Asc (varchar)
If varasc < 0 Then
varasc = varasc + 65535
End If
If varasc > 255 Then
varlow = Left ( Hex ( Asc (varchar)), 2 )
varhigh = right ( Hex ( Asc (varchar)), 2 )
str2bin = str2bin & chrB( " &H " & varlow) & chrB( " &H " & varhigh)
Else
str2bin = str2bin & chrB(AscB(varchar))
End If
Next
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
If Md5OLD = 1 Then
lMessageLength = Len (sMessage)
Else
lMessageLength = LenB(sMessage)
End If
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
If Md5OLD = 1 Then
lWordArray(lWordCount) = lWordArray(lWordCount) or LShift( Asc ( Mid (sMessage, lByteCount + 1 , 1 )), lBytePosition)
Else
lWordArray(lWordCount) = lWordArray(lWordCount) or LShift(AscB(MidB(sMessage, lByteCount + 1 , 1 )), lBytePosition)
End If
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,stype)
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
If Md5OLD = 1 Then
x = ConvertToWordArray(sMessage)
Else
x = ConvertToWordArray(str2bin(sMessage))
End If
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
if stype = 32 then
MD5 = LCase (WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d))
else
MD5 = LCase (WordToHex(b) & WordToHex(c)) ' I crop this to fit 16byte database password :D
end if
End Function
%>
test.asp 测试页的内容
<!--
#include file=md5.asp
-->
<%
response.write MD5( " http://blog.sina.com.cn/juyonghong " , 32 ) ' 生成32位编码
response.write " <br><br> "
response.write MD5( " http://blog.sina.com.cn/juyonghong " , 16 ) ' 生成16位编码
%>
<%
response.write MD5( " http://blog.sina.com.cn/juyonghong " , 32 ) ' 生成32位编码
response.write " <br><br> "
response.write MD5( " http://blog.sina.com.cn/juyonghong " , 16 ) ' 生成16位编码
%>
注:
1、由于MD5加密目前来说是不可逆的,即可以通过原始数据生成md5码后,但不能通过md5码还原数据。
2、虽然不可逆,但同一个字符串只能生成同样的一组md5码。
具体使用方法:(以用户注册、登录为例)
1、注册时,将md5(request.form("password"),16)的值存入数据库;
2、登录验证时,将数据库中存的md5码与md5("密码",16)比较。