<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[gOxiA=苏繁=SuFan Blog]]></title> 
<link>https://sufan.maytide.net/index.php</link> 
<description><![CDATA[gOxiA,苏繁,sufan,Microsoft MVP]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[gOxiA=苏繁=SuFan Blog]]></copyright>
<item>
<link>https://sufan.maytide.net/read.php/835.htm</link>
<title><![CDATA[MD5.asp Code]]></title> 
<author>gOxiA &lt;sufan_cn@msn.com&gt;</author>
<category><![CDATA[网络编程]]></category>
<pubDate>Wed, 04 Aug 2004 09:32:14 +0000</pubDate> 
<guid>https://sufan.maytide.net/read.php/835.htm</guid> 
<description>
<![CDATA[ 
	以下是MD5的源代码。<div class="code">&lt;% <br />Private Const BITS_TO_A_BYTE = 8 <br />Private Const BYTES_TO_A_WORD = 4 <br />Private Const BITS_TO_A_WORD = 32 <br /><br />Private m_lOnBits(30) <br />Private m_l2Power(30) <br /><br />Private Function LShift(lValue, iShiftBits) <br />If iShiftBits = 0 Then <br />LShift = lValue <br />Exit Function <br />ElseIf iShiftBits = 31 Then <br />If lValue And 1 Then <br />LShift = &amp;H80000000 <br />Else <br />LShift = 0 <br />End If <br />Exit Function <br />ElseIf iShiftBits &lt; 0 Or iShiftBits &gt; 31 Then <br />Err.Raise 6 <br />End If <br /><br />If (lValue And m_l2Power(31 - iShiftBits)) Then <br />LShift = ((lValue And m_lOnBits(31 - (iShiftBits + 1))) * m_l2Power(iShiftBits)) Or &amp;H80000000 <br />Else <br />LShift = ((lValue And m_lOnBits(31 - iShiftBits)) * m_l2Power(iShiftBits)) <br />End If <br />End Function <br /><br />Private Function RShift(lValue, iShiftBits) <br />If iShiftBits = 0 Then <br />RShift = lValue <br />Exit Function <br />ElseIf iShiftBits = 31 Then <br />If lValue And &amp;H80000000 Then <br />RShift = 1 <br />Else <br />RShift = 0 <br />End If <br />Exit Function <br />ElseIf iShiftBits &lt; 0 Or iShiftBits &gt; 31 Then <br />Err.Raise 6 <br />End If <br /><br />RShift = (lValue And &amp;H7FFFFFFE) \ m_l2Power(iShiftBits) <br /><br />If (lValue And &amp;H80000000) Then <br />RShift = (RShift Or (&amp;H40000000 \ m_l2Power(iShiftBits - 1))) <br />End If <br />End Function <br /><br />Private Function RotateLeft(lValue, iShiftBits) <br />RotateLeft = LShift(lValue, iShiftBits) Or RShift(lValue, (32 - iShiftBits)) <br />End Function <br /><br />Private Function AddUnsigned(lX, lY) <br />Dim lX4 <br />Dim lY4 <br />Dim lX8 <br />Dim lY8 <br />Dim lResult <br /><br />lX8 = lX And &amp;H80000000 <br />lY8 = lY And &amp;H80000000 <br />lX4 = lX And &amp;H40000000 <br />lY4 = lY And &amp;H40000000 <br /><br />lResult = (lX And &amp;H3FFFFFFF) + (lY And &amp;H3FFFFFFF) <br /><br />If lX4 And lY4 Then <br />lResult = lResult Xor &amp;H80000000 Xor lX8 Xor lY8 <br />ElseIf lX4 Or lY4 Then <br />If lResult And &amp;H40000000 Then <br />lResult = lResult Xor &amp;HC0000000 Xor lX8 Xor lY8 <br />Else <br />lResult = lResult Xor &amp;H40000000 Xor lX8 Xor lY8 <br />End If <br />Else <br />lResult = lResult Xor lX8 Xor lY8 <br />End If <br /><br />AddUnsigned = lResult <br />End Function <br /><br />Private Function md5_F(x, y, z) <br />md5_F = (x And y) Or ((Not x) And z) <br />End Function <br /><br />Private Function md5_G(x, y, z) <br />md5_G = (x And z) Or (y And (Not z)) <br />End Function <br /><br />Private Function md5_H(x, y, z) <br />md5_H = (x Xor y Xor z) <br />End Function <br /><br />Private Function md5_I(x, y, z) <br />md5_I = (y Xor (x Or (Not z))) <br />End Function <br /><br />Private Sub md5_FF(a, b, c, d, x, s, ac) <br />a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_F(b, c, d), x), ac)) <br />a = RotateLeft(a, s) <br />a = AddUnsigned(a, b) <br />End Sub <br /><br />Private Sub md5_GG(a, b, c, d, x, s, ac) <br />a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_G(b, c, d), x), ac)) <br />a = RotateLeft(a, s) <br />a = AddUnsigned(a, b) <br />End Sub <br /><br />Private Sub md5_HH(a, b, c, d, x, s, ac) <br />a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_H(b, c, d), x), ac)) <br />a = RotateLeft(a, s) <br />a = AddUnsigned(a, b) <br />End Sub <br /><br />Private Sub md5_II(a, b, c, d, x, s, ac) <br />a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_I(b, c, d), x), ac)) <br />a = RotateLeft(a, s) <br />a = AddUnsigned(a, b) <br />End Sub <br /><br />Private Function ConvertToWordArray(sMessage) <br />Dim lMessageLength <br />Dim lNumberOfWords <br />Dim lWordArray() <br />Dim lBytePosition <br />Dim lByteCount <br />Dim lWordCount <br /><br />Const MODULUS_BITS = 512 <br />Const CONGRUENT_BITS = 448 <br /><br />lMessageLength = Len(sMessage) <br /><br />lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS \ BITS_TO_A_WORD) <br />ReDim lWordArray(lNumberOfWords - 1) <br /><br />lBytePosition = 0 <br />lByteCount = 0 <br />Do Until lByteCount &gt;= lMessageLength <br />lWordCount = lByteCount \ BYTES_TO_A_WORD <br />lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE <br />lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(Asc(Mid(sMessage, lByteCount + 1, 1)), lBytePosition) <br />lByteCount = lByteCount + 1 <br />Loop <br /><br />lWordCount = lByteCount \ BYTES_TO_A_WORD <br />lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE <br /><br />lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(&amp;H80, lBytePosition) <br /><br />lWordArray(lNumberOfWords - 2) = LShift(lMessageLength, 3) <br />lWordArray(lNumberOfWords - 1) = RShift(lMessageLength, 29) <br /><br />ConvertToWordArray = lWordArray <br />End Function <br /><br />Private Function WordToHex(lValue) <br />Dim lByte <br />Dim lCount <br /><br />For lCount = 0 To 3 <br />lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) And m_lOnBits(BITS_TO_A_BYTE - 1) <br />WordToHex = WordToHex &amp; Right(&quot;0&quot; &amp; Hex(lByte), 2) <br />Next <br />End Function <br />Public Function MD5(sMessage) <br />m_lOnBits(0) = CLng(1) <br />m_lOnBits(1) = CLng(3) <br />m_lOnBits(2) = CLng(7) <br />m_lOnBits(3) = CLng(15) <br />m_lOnBits(4) = CLng(31) <br />m_lOnBits(5) = CLng(63) <br />m_lOnBits(6) = CLng(127) <br />m_lOnBits(7) = CLng(255) <br />m_lOnBits(8) = CLng(511) <br />m_lOnBits(9) = CLng(1023) <br />m_lOnBits(10) = CLng(2047) <br />m_lOnBits(11) = CLng(4095) <br />m_lOnBits(12) = CLng(8191) <br />m_lOnBits(13) = CLng(16383) <br />m_lOnBits(14) = CLng(32767) <br />m_lOnBits(15) = CLng(65535) <br />m_lOnBits(16) = CLng(131071) <br />m_lOnBits(17) = CLng(262143) <br />m_lOnBits(18) = CLng(524287) <br />m_lOnBits(19) = CLng(1048575) <br />m_lOnBits(20) = CLng(2097151) <br />m_lOnBits(21) = CLng(4194303) <br />m_lOnBits(22) = CLng(8388607) <br />m_lOnBits(23) = CLng(16777215) <br />m_lOnBits(24) = CLng(33554431) <br />m_lOnBits(25) = CLng(67108863) <br />m_lOnBits(26) = CLng(134217727) <br />m_lOnBits(27) = CLng(268435455) <br />m_lOnBits(28) = CLng(536870911) <br />m_lOnBits(29) = CLng(1073741823) <br />m_lOnBits(30) = CLng(2147483647) <br /><br />m_l2Power(0) = CLng(1) <br />m_l2Power(1) = CLng(2) <br />m_l2Power(2) = CLng(4) <br />m_l2Power(3) = CLng(8) <br />m_l2Power(4) = CLng(16) <br />m_l2Power(5) = CLng(32) <br />m_l2Power(6) = CLng(64) <br />m_l2Power(7) = CLng(128) <br />m_l2Power(8) = CLng(256) <br />m_l2Power(9) = CLng(512) <br />m_l2Power(10) = CLng(1024) <br />m_l2Power(11) = CLng(2048) <br />m_l2Power(12) = CLng(4096) <br />m_l2Power(13) = CLng(8192) <br />m_l2Power(14) = CLng(16384) <br />m_l2Power(15) = CLng(32768) <br />m_l2Power(16) = CLng(65536) <br />m_l2Power(17) = CLng(131072) <br />m_l2Power(18) = CLng(262144) <br />m_l2Power(19) = CLng(524288) <br />m_l2Power(20) = CLng(1048576) <br />m_l2Power(21) = CLng(2097152) <br />m_l2Power(22) = CLng(4194304) <br />m_l2Power(23) = CLng(8388608) <br />m_l2Power(24) = CLng(16777216) <br />m_l2Power(25) = CLng(33554432) <br />m_l2Power(26) = CLng(67108864) <br />m_l2Power(27) = CLng(134217728) <br />m_l2Power(28) = CLng(268435456) <br />m_l2Power(29) = CLng(536870912) <br />m_l2Power(30) = CLng(1073741824) <br /><br /><br />Dim x <br />Dim k <br />Dim AA <br />Dim BB <br />Dim CC <br />Dim DD <br />Dim a <br />Dim b <br />Dim c <br />Dim d <br /><br />Const S11 = 7 <br />Const S12 = 12 <br />Const S13 = 17 <br />Const S14 = 22 <br />Const S21 = 5 <br />Const S22 = 9 <br />Const S23 = 14 <br />Const S24 = 20 <br />Const S31 = 4 <br />Const S32 = 11 <br />Const S33 = 16 <br />Const S34 = 23 <br />Const S41 = 6 <br />Const S42 = 10 <br />Const S43 = 15 <br />Const S44 = 21 <br /><br />x = ConvertToWordArray(sMessage) <br /><br />a = &amp;H67452301 <br />b = &amp;HEFCDAB89 <br />c = &amp;H98BADCFE <br />d = &amp;H10325476 <br /><br />For k = 0 To UBound(x) Step 16 <br />AA = a <br />BB = b <br />CC = c <br />DD = d <br /><br />md5_FF a, b, c, d, x(k + 0), S11, &amp;HD76AA478 <br />md5_FF d, a, b, c, x(k + 1), S12, &amp;HE8C7B756 <br />md5_FF c, d, a, b, x(k + 2), S13, &amp;H242070DB <br />md5_FF b, c, d, a, x(k + 3), S14, &amp;HC1BDCEEE <br />md5_FF a, b, c, d, x(k + 4), S11, &amp;HF57C0FAF <br />md5_FF d, a, b, c, x(k + 5), S12, &amp;H4787C62A <br />md5_FF c, d, a, b, x(k + 6), S13, &amp;HA8304613 <br />md5_FF b, c, d, a, x(k + 7), S14, &amp;HFD469501 <br />md5_FF a, b, c, d, x(k + 8), S11, &amp;H698098D8 <br />md5_FF d, a, b, c, x(k + 9), S12, &amp;H8B44F7AF <br />md5_FF c, d, a, b, x(k + 10), S13, &amp;HFFFF5BB1 <br />md5_FF b, c, d, a, x(k + 11), S14, &amp;H895CD7BE <br />md5_FF a, b, c, d, x(k + 12), S11, &amp;H6B901122 <br />md5_FF d, a, b, c, x(k + 13), S12, &amp;HFD987193 <br />md5_FF c, d, a, b, x(k + 14), S13, &amp;HA679438E <br />md5_FF b, c, d, a, x(k + 15), S14, &amp;H49B40821 <br /><br />md5_GG a, b, c, d, x(k + 1), S21, &amp;HF61E2562 <br />md5_GG d, a, b, c, x(k + 6), S22, &amp;HC040B340 <br />md5_GG c, d, a, b, x(k + 11), S23, &amp;H265E5A51 <br />md5_GG b, c, d, a, x(k + 0), S24, &amp;HE9B6C7AA <br />md5_GG a, b, c, d, x(k + 5), S21, &amp;HD62F105D <br />md5_GG d, a, b, c, x(k + 10), S22, &amp;H2441453 <br />md5_GG c, d, a, b, x(k + 15), S23, &amp;HD8A1E681 <br />md5_GG b, c, d, a, x(k + 4), S24, &amp;HE7D3FBC8 <br />md5_GG a, b, c, d, x(k + 9), S21, &amp;H21E1CDE6 <br />md5_GG d, a, b, c, x(k + 14), S22, &amp;HC33707D6 <br />md5_GG c, d, a, b, x(k + 3), S23, &amp;HF4D50D87 <br />md5_GG b, c, d, a, x(k + 8), S24, &amp;H455A14ED <br />md5_GG a, b, c, d, x(k + 13), S21, &amp;HA9E3E905 <br />md5_GG d, a, b, c, x(k + 2), S22, &amp;HFCEFA3F8 <br />md5_GG c, d, a, b, x(k + 7), S23, &amp;H676F02D9 <br />md5_GG b, c, d, a, x(k + 12), S24, &amp;H8D2A4C8A <br /><br />md5_HH a, b, c, d, x(k + 5), S31, &amp;HFFFA3942 <br />md5_HH d, a, b, c, x(k + 8), S32, &amp;H8771F681 <br />md5_HH c, d, a, b, x(k + 11), S33, &amp;H6D9D6122 <br />md5_HH b, c, d, a, x(k + 14), S34, &amp;HFDE5380C <br />md5_HH a, b, c, d, x(k + 1), S31, &amp;HA4BEEA44 <br />md5_HH d, a, b, c, x(k + 4), S32, &amp;H4BDECFA9 <br />md5_HH c, d, a, b, x(k + 7), S33, &amp;HF6BB4B60 <br />md5_HH b, c, d, a, x(k + 10), S34, &amp;HBEBFBC70 <br />md5_HH a, b, c, d, x(k + 13), S31, &amp;H289B7EC6 <br />md5_HH d, a, b, c, x(k + 0), S32, &amp;HEAA127FA <br />md5_HH c, d, a, b, x(k + 3), S33, &amp;HD4EF3085 <br />md5_HH b, c, d, a, x(k + 6), S34, &amp;H4881D05 <br />md5_HH a, b, c, d, x(k + 9), S31, &amp;HD9D4D039 <br />md5_HH d, a, b, c, x(k + 12), S32, &amp;HE6DB99E5 <br />md5_HH c, d, a, b, x(k + 15), S33, &amp;H1FA27CF8 <br />md5_HH b, c, d, a, x(k + 2), S34, &amp;HC4AC5665 <br /><br />md5_II a, b, c, d, x(k + 0), S41, &amp;HF4292244 <br />md5_II d, a, b, c, x(k + 7), S42, &amp;H432AFF97 <br />md5_II c, d, a, b, x(k + 14), S43, &amp;HAB9423A7 <br />md5_II b, c, d, a, x(k + 5), S44, &amp;HFC93A039 <br />md5_II a, b, c, d, x(k + 12), S41, &amp;H655B59C3 <br />md5_II d, a, b, c, x(k + 3), S42, &amp;H8F0CCC92 <br />md5_II c, d, a, b, x(k + 10), S43, &amp;HFFEFF47D <br />md5_II b, c, d, a, x(k + 1), S44, &amp;H85845DD1 <br />md5_II a, b, c, d, x(k + 8), S41, &amp;H6FA87E4F <br />md5_II d, a, b, c, x(k + 15), S42, &amp;HFE2CE6E0 <br />md5_II c, d, a, b, x(k + 6), S43, &amp;HA3014314 <br />md5_II b, c, d, a, x(k + 13), S44, &amp;H4E0811A1 <br />md5_II a, b, c, d, x(k + 4), S41, &amp;HF7537E82 <br />md5_II d, a, b, c, x(k + 11), S42, &amp;HBD3AF235 <br />md5_II c, d, a, b, x(k + 2), S43, &amp;H2AD7D2BB <br />md5_II b, c, d, a, x(k + 9), S44, &amp;HEB86D391 <br /><br />a = AddUnsigned(a, AA) <br />b = AddUnsigned(b, BB) <br />c = AddUnsigned(c, CC) <br />d = AddUnsigned(d, DD) <br />Next <br /><br />MD5 = LCase(WordToHex(a) &amp; WordToHex(b) &amp; WordToHex(c) &amp; WordToHex(d)) <br />'MD5=LCase(WordToHex(b) &amp; WordToHex(c)) 'I crop this to fit 16byte database password :D <br />End Function <br />%&gt;<br /><!--<br/>Private Const BITS_TO_A_BYTE = 8 <br/>Private Const BYTES_TO_A_WORD = 4 <br/>Private Const BITS_TO_A_WORD = 32 <br/><br/>Private m_lOnBits(30) <br/>Private m_l2Power(30) <br/><br/>Private Function LShift(lValue, iShiftBits) <br/>If iShiftBits = 0 Then <br/>LShift = lValue <br/>Exit Function <br/>ElseIf iShiftBits = 31 Then <br/>If lValue And 1 Then <br/>LShift = &H80000000 <br/>Else <br/>LShift = 0 <br/>End If <br/>Exit Function <br/>ElseIf iShiftBits < 0 Or iShiftBits > 31 Then <br/>Err.Raise 6 <br/>End If <br/><br/>If (lValue And m_l2Power(31 - iShiftBits)) Then <br/>LShift = ((lValue And m_lOnBits(31 - (iShiftBits + 1))) * m_l2Power(iShiftBits)) Or &H80000000 <br/>Else <br/>LShift = ((lValue And m_lOnBits(31 - iShiftBits)) * m_l2Power(iShiftBits)) <br/>End If <br/>End Function <br/><br/>Private Function RShift(lValue, iShiftBits) <br/>If iShiftBits = 0 Then <br/>RShift = lValue <br/>Exit Function <br/>ElseIf iShiftBits = 31 Then <br/>If lValue And &H80000000 Then <br/>RShift = 1 <br/>Else <br/>RShift = 0 <br/>End If <br/>Exit Function <br/>ElseIf iShiftBits < 0 Or iShiftBits > 31 Then <br/>Err.Raise 6 <br/>End If <br/><br/>RShift = (lValue And &H7FFFFFFE) \ m_l2Power(iShiftBits) <br/><br/>If (lValue And &H80000000) Then <br/>RShift = (RShift Or (&H40000000 \ m_l2Power(iShiftBits - 1))) <br/>End If <br/>End Function <br/><br/>Private Function RotateLeft(lValue, iShiftBits) <br/>RotateLeft = LShift(lValue, iShiftBits) Or RShift(lValue, (32 - iShiftBits)) <br/>End Function <br/><br/>Private Function AddUnsigned(lX, lY) <br/>Dim lX4 <br/>Dim lY4 <br/>Dim lX8 <br/>Dim lY8 <br/>Dim lResult <br/><br/>lX8 = lX And &H80000000 <br/>lY8 = lY And &H80000000 <br/>lX4 = lX And &H40000000 <br/>lY4 = lY And &H40000000 <br/><br/>lResult = (lX And &H3FFFFFFF) + (lY And &H3FFFFFFF) <br/><br/>If lX4 And lY4 Then <br/>lResult = lResult Xor &H80000000 Xor lX8 Xor lY8 <br/>ElseIf lX4 Or lY4 Then <br/>If lResult And &H40000000 Then <br/>lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8 <br/>Else <br/>lResult = lResult Xor &H40000000 Xor lX8 Xor lY8 <br/>End If <br/>Else <br/>lResult = lResult Xor lX8 Xor lY8 <br/>End If <br/><br/>AddUnsigned = lResult <br/>End Function <br/><br/>Private Function md5_F(x, y, z) <br/>md5_F = (x And y) Or ((Not x) And z) <br/>End Function <br/><br/>Private Function md5_G(x, y, z) <br/>md5_G = (x And z) Or (y And (Not z)) <br/>End Function <br/><br/>Private Function md5_H(x, y, z) <br/>md5_H = (x Xor y Xor z) <br/>End Function <br/><br/>Private Function md5_I(x, y, z) <br/>md5_I = (y Xor (x Or (Not z))) <br/>End Function <br/><br/>Private Sub md5_FF(a, b, c, d, x, s, ac) <br/>a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_F(b, c, d), x), ac)) <br/>a = RotateLeft(a, s) <br/>a = AddUnsigned(a, b) <br/>End Sub <br/><br/>Private Sub md5_GG(a, b, c, d, x, s, ac) <br/>a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_G(b, c, d), x), ac)) <br/>a = RotateLeft(a, s) <br/>a = AddUnsigned(a, b) <br/>End Sub <br/><br/>Private Sub md5_HH(a, b, c, d, x, s, ac) <br/>a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_H(b, c, d), x), ac)) <br/>a = RotateLeft(a, s) <br/>a = AddUnsigned(a, b) <br/>End Sub <br/><br/>Private Sub md5_II(a, b, c, d, x, s, ac) <br/>a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_I(b, c, d), x), ac)) <br/>a = RotateLeft(a, s) <br/>a = AddUnsigned(a, b) <br/>End Sub <br/><br/>Private Function ConvertToWordArray(sMessage) <br/>Dim lMessageLength <br/>Dim lNumberOfWords <br/>Dim lWordArray() <br/>Dim lBytePosition <br/>Dim lByteCount <br/>Dim lWordCount <br/><br/>Const MODULUS_BITS = 512 <br/>Const CONGRUENT_BITS = 448 <br/><br/>lMessageLength = Len(sMessage) <br/><br/>lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS \ BITS_TO_A_WORD) <br/>ReDim lWordArray(lNumberOfWords - 1) <br/><br/>lBytePosition = 0 <br/>lByteCount = 0 <br/>Do Until lByteCount >= lMessageLength <br/>lWordCount = lByteCount \ BYTES_TO_A_WORD <br/>lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE <br/>lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(Asc(Mid(sMessage, lByteCount + 1, 1)), lBytePosition) <br/>lByteCount = lByteCount + 1 <br/>Loop <br/><br/>lWordCount = lByteCount \ BYTES_TO_A_WORD <br/>lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE <br/><br/>lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(&H80, lBytePosition) <br/><br/>lWordArray(lNumberOfWords - 2) = LShift(lMessageLength, 3) <br/>lWordArray(lNumberOfWords - 1) = RShift(lMessageLength, 29) <br/><br/>ConvertToWordArray = lWordArray <br/>End Function <br/><br/>Private Function WordToHex(lValue) <br/>Dim lByte <br/>Dim lCount <br/><br/>For lCount = 0 To 3 <br/>lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) And m_lOnBits(BITS_TO_A_BYTE - 1) <br/>WordToHex = WordToHex & Right(\"0\" & Hex(lByte), 2) <br/>Next <br/>End Function <br/>Public Function MD5(sMessage) <br/>m_lOnBits(0) = CLng(1) <br/>m_lOnBits(1) = CLng(3) <br/>m_lOnBits(2) = CLng(7) <br/>m_lOnBits(3) = CLng(15) <br/>m_lOnBits(4) = CLng(31) <br/>m_lOnBits(5) = CLng(63) <br/>m_lOnBits(6) = CLng(127) <br/>m_lOnBits(7) = CLng(255) <br/>m_lOnBits(8) = CLng(511) <br/>m_lOnBits(9) = CLng(1023) <br/>m_lOnBits(10) = CLng(2047) <br/>m_lOnBits(11) = CLng(4095) <br/>m_lOnBits(12) = CLng(8191) <br/>m_lOnBits(13) = CLng(16383) <br/>m_lOnBits(14) = CLng(32767) <br/>m_lOnBits(15) = CLng(65535) <br/>m_lOnBits(16) = CLng(131071) <br/>m_lOnBits(17) = CLng(262143) <br/>m_lOnBits(18) = CLng(524287) <br/>m_lOnBits(19) = CLng(1048575) <br/>m_lOnBits(20) = CLng(2097151) <br/>m_lOnBits(21) = CLng(4194303) <br/>m_lOnBits(22) = CLng(8388607) <br/>m_lOnBits(23) = CLng(16777215) <br/>m_lOnBits(24) = CLng(33554431) <br/>m_lOnBits(25) = CLng(67108863) <br/>m_lOnBits(26) = CLng(134217727) <br/>m_lOnBits(27) = CLng(268435455) <br/>m_lOnBits(28) = CLng(536870911) <br/>m_lOnBits(29) = CLng(1073741823) <br/>m_lOnBits(30) = CLng(2147483647) <br/><br/>m_l2Power(0) = CLng(1) <br/>m_l2Power(1) = CLng(2) <br/>m_l2Power(2) = CLng(4) <br/>m_l2Power(3) = CLng(8) <br/>m_l2Power(4) = CLng(16) <br/>m_l2Power(5) = CLng(32) <br/>m_l2Power(6) = CLng(64) <br/>m_l2Power(7) = CLng(128) <br/>m_l2Power(8) = CLng(256) <br/>m_l2Power(9) = CLng(512) <br/>m_l2Power(10) = CLng(1024) <br/>m_l2Power(11) = CLng(2048) <br/>m_l2Power(12) = CLng(4096) <br/>m_l2Power(13) = CLng(8192) <br/>m_l2Power(14) = CLng(16384) <br/>m_l2Power(15) = CLng(32768) <br/>m_l2Power(16) = CLng(65536) <br/>m_l2Power(17) = CLng(131072) <br/>m_l2Power(18) = CLng(262144) <br/>m_l2Power(19) = CLng(524288) <br/>m_l2Power(20) = CLng(1048576) <br/>m_l2Power(21) = CLng(2097152) <br/>m_l2Power(22) = CLng(4194304) <br/>m_l2Power(23) = CLng(8388608) <br/>m_l2Power(24) = CLng(16777216) <br/>m_l2Power(25) = CLng(33554432) <br/>m_l2Power(26) = CLng(67108864) <br/>m_l2Power(27) = CLng(134217728) <br/>m_l2Power(28) = CLng(268435456) <br/>m_l2Power(29) = CLng(536870912) <br/>m_l2Power(30) = CLng(1073741824) <br/><br/><br/>Dim x <br/>Dim k <br/>Dim AA <br/>Dim BB <br/>Dim CC <br/>Dim DD <br/>Dim a <br/>Dim b <br/>Dim c <br/>Dim d <br/><br/>Const S11 = 7 <br/>Const S12 = 12 <br/>Const S13 = 17 <br/>Const S14 = 22 <br/>Const S21 = 5 <br/>Const S22 = 9 <br/>Const S23 = 14 <br/>Const S24 = 20 <br/>Const S31 = 4 <br/>Const S32 = 11 <br/>Const S33 = 16 <br/>Const S34 = 23 <br/>Const S41 = 6 <br/>Const S42 = 10 <br/>Const S43 = 15 <br/>Const S44 = 21 <br/><br/>x = ConvertToWordArray(sMessage) <br/><br/>a = &H67452301 <br/>b = &HEFCDAB89 <br/>c = &H98BADCFE <br/>d = &H10325476 <br/><br/>For k = 0 To UBound(x) Step 16 <br/>AA = a <br/>BB = b <br/>CC = c <br/>DD = d <br/><br/>md5_FF a, b, c, d, x(k + 0), S11, &HD76AA478 <br/>md5_FF d, a, b, c, x(k + 1), S12, &HE8C7B756 <br/>md5_FF c, d, a, b, x(k + 2), S13, &H242070DB <br/>md5_FF b, c, d, a, x(k + 3), S14, &HC1BDCEEE <br/>md5_FF a, b, c, d, x(k + 4), S11, &HF57C0FAF <br/>md5_FF d, a, b, c, x(k + 5), S12, &H4787C62A <br/>md5_FF c, d, a, b, x(k + 6), S13, &HA8304613 <br/>md5_FF b, c, d, a, x(k + 7), S14, &HFD469501 <br/>md5_FF a, b, c, d, x(k + 8), S11, &H698098D8 <br/>md5_FF d, a, b, c, x(k + 9), S12, &H8B44F7AF <br/>md5_FF c, d, a, b, x(k + 10), S13, &HFFFF5BB1 <br/>md5_FF b, c, d, a, x(k + 11), S14, &H895CD7BE <br/>md5_FF a, b, c, d, x(k + 12), S11, &H6B901122 <br/>md5_FF d, a, b, c, x(k + 13), S12, &HFD987193 <br/>md5_FF c, d, a, b, x(k + 14), S13, &HA679438E <br/>md5_FF b, c, d, a, x(k + 15), S14, &H49B40821 <br/><br/>md5_GG a, b, c, d, x(k + 1), S21, &HF61E2562 <br/>md5_GG d, a, b, c, x(k + 6), S22, &HC040B340 <br/>md5_GG c, d, a, b, x(k + 11), S23, &H265E5A51 <br/>md5_GG b, c, d, a, x(k + 0), S24, &HE9B6C7AA <br/>md5_GG a, b, c, d, x(k + 5), S21, &HD62F105D <br/>md5_GG d, a, b, c, x(k + 10), S22, &H2441453 <br/>md5_GG c, d, a, b, x(k + 15), S23, &HD8A1E681 <br/>md5_GG b, c, d, a, x(k + 4), S24, &HE7D3FBC8 <br/>md5_GG a, b, c, d, x(k + 9), S21, &H21E1CDE6 <br/>md5_GG d, a, b, c, x(k + 14), S22, &HC33707D6 <br/>md5_GG c, d, a, b, x(k + 3), S23, &HF4D50D87 <br/>md5_GG b, c, d, a, x(k + 8), S24, &H455A14ED <br/>md5_GG a, b, c, d, x(k + 13), S21, &HA9E3E905 <br/>md5_GG d, a, b, c, x(k + 2), S22, &HFCEFA3F8 <br/>md5_GG c, d, a, b, x(k + 7), S23, &H676F02D9 <br/>md5_GG b, c, d, a, x(k + 12), S24, &H8D2A4C8A <br/><br/>md5_HH a, b, c, d, x(k + 5), S31, &HFFFA3942 <br/>md5_HH d, a, b, c, x(k + 8), S32, &H8771F681 <br/>md5_HH c, d, a, b, x(k + 11), S33, &H6D9D6122 <br/>md5_HH b, c, d, a, x(k + 14), S34, &HFDE5380C <br/>md5_HH a, b, c, d, x(k + 1), S31, &HA4BEEA44 <br/>md5_HH d, a, b, c, x(k + 4), S32, &H4BDECFA9 <br/>md5_HH c, d, a, b, x(k + 7), S33, &HF6BB4B60 <br/>md5_HH b, c, d, a, x(k + 10), S34, &HBEBFBC70 <br/>md5_HH a, b, c, d, x(k + 13), S31, &H289B7EC6 <br/>md5_HH d, a, b, c, x(k + 0), S32, &HEAA127FA <br/>md5_HH c, d, a, b, x(k + 3), S33, &HD4EF3085 <br/>md5_HH b, c, d, a, x(k + 6), S34, &H4881D05 <br/>md5_HH a, b, c, d, x(k + 9), S31, &HD9D4D039 <br/>md5_HH d, a, b, c, x(k + 12), S32, &HE6DB99E5 <br/>md5_HH c, d, a, b, x(k + 15), S33, &H1FA27CF8 <br/>md5_HH b, c, d, a, x(k + 2), S34, &HC4AC5665 <br/><br/>md5_II a, b, c, d, x(k + 0), S41, &HF4292244 <br/>md5_II d, a, b, c, x(k + 7), S42, &H432AFF97 <br/>md5_II c, d, a, b, x(k + 14), S43, &HAB9423A7 <br/>md5_II b, c, d, a, x(k + 5), S44, &HFC93A039 <br/>md5_II a, b, c, d, x(k + 12), S41, &H655B59C3 <br/>md5_II d, a, b, c, x(k + 3), S42, &H8F0CCC92 <br/>md5_II c, d, a, b, x(k + 10), S43, &HFFEFF47D <br/>md5_II b, c, d, a, x(k + 1), S44, &H85845DD1 <br/>md5_II a, b, c, d, x(k + 8), S41, &H6FA87E4F <br/>md5_II d, a, b, c, x(k + 15), S42, &HFE2CE6E0 <br/>md5_II c, d, a, b, x(k + 6), S43, &HA3014314 <br/>md5_II b, c, d, a, x(k + 13), S44, &H4E0811A1 <br/>md5_II a, b, c, d, x(k + 4), S41, &HF7537E82 <br/>md5_II d, a, b, c, x(k + 11), S42, &HBD3AF235 <br/>md5_II c, d, a, b, x(k + 2), S43, &H2AD7D2BB <br/>md5_II b, c, d, a, x(k + 9), S44, &HEB86D391 <br/><br/>a = AddUnsigned(a, AA) <br/>b = AddUnsigned(b, BB) <br/>c = AddUnsigned(c, CC) <br/>d = AddUnsigned(d, DD) <br/>Next <br/><br/>MD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d)) <br/>'MD5=LCase(WordToHex(b) & WordToHex(c)) 'I crop this to fit 16byte database password :D <br/>End Function <br/>--></div>
]]>
</description>
</item>
</channel>
</rss>