两个版本的MD5,结果不一样,高手求解 VB & DELPHI ( 积分: 300 )

  • 主题发起人 主题发起人 luckandy
  • 开始时间 开始时间
L

luckandy

Unregistered / Unconfirmed
GUEST, unregistred user!
Private&nbsp;Function&nbsp;md5_F(x,&nbsp;y,&nbsp;z)<br>&nbsp;&nbsp;&nbsp;&nbsp;md5_F&nbsp;=&nbsp;(x&nbsp;And&nbsp;y)&nbsp;Or&nbsp;((Not&nbsp;x)&nbsp;And&nbsp;z)<br>End&nbsp;Function<br><br>Private&nbsp;Function&nbsp;md5_G(x,&nbsp;y,&nbsp;z)<br>&nbsp;&nbsp;&nbsp;&nbsp;md5_G&nbsp;=&nbsp;(x&nbsp;And&nbsp;z)&nbsp;Or&nbsp;(y&nbsp;And&nbsp;(Not&nbsp;z))<br>End&nbsp;Function<br><br>Private&nbsp;Function&nbsp;md5_H(x,&nbsp;y,&nbsp;z)<br>&nbsp;&nbsp;&nbsp;&nbsp;md5_H&nbsp;=&nbsp;(x&nbsp;Xor&nbsp;y&nbsp;Xor&nbsp;z)<br>End&nbsp;Function<br><br>Private&nbsp;Function&nbsp;md5_I(x,&nbsp;y,&nbsp;z)<br>&nbsp;&nbsp;&nbsp;&nbsp;md5_I&nbsp;=&nbsp;(y&nbsp;Xor&nbsp;(x&nbsp;Or&nbsp;(Not&nbsp;z)))<br>End&nbsp;Function<br><br>Private&nbsp;Sub&nbsp;md5_FF(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x,&nbsp;s,&nbsp;ac)<br>&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;AddUnsigned(a,&nbsp;AddUnsigned(AddUnsigned(md5_F(b,&nbsp;c,&nbsp;d),&nbsp;x),&nbsp;ac))<br>&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;RotateLeft(a,&nbsp;s)<br>&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;AddUnsigned(a,&nbsp;b)<br>End&nbsp;Sub<br><br>Private&nbsp;Sub&nbsp;md5_GG(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x,&nbsp;s,&nbsp;ac)<br>&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;AddUnsigned(a,&nbsp;AddUnsigned(AddUnsigned(md5_G(b,&nbsp;c,&nbsp;d),&nbsp;x),&nbsp;ac))<br>&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;RotateLeft(a,&nbsp;s)<br>&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;AddUnsigned(a,&nbsp;b)<br>End&nbsp;Sub<br><br>Private&nbsp;Sub&nbsp;md5_HH(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x,&nbsp;s,&nbsp;ac)<br>&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;AddUnsigned(a,&nbsp;AddUnsigned(AddUnsigned(md5_H(b,&nbsp;c,&nbsp;d),&nbsp;x),&nbsp;ac))<br>&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;RotateLeft(a,&nbsp;s)<br>&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;AddUnsigned(a,&nbsp;b)<br>End&nbsp;Sub<br><br>Private&nbsp;Sub&nbsp;md5_II(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x,&nbsp;s,&nbsp;ac)<br>&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;AddUnsigned(a,&nbsp;AddUnsigned(AddUnsigned(md5_I(b,&nbsp;c,&nbsp;d),&nbsp;x),&nbsp;ac))<br>&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;RotateLeft(a,&nbsp;s)<br>&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;AddUnsigned(a,&nbsp;b)<br>End&nbsp;Sub<br><br>Private&nbsp;Function&nbsp;ConvertToWordArray(sMessage)<br>&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;lMessageLength<br>&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;lNumberOfWords<br>&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;lWordArray()<br>&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;lBytePosition<br>&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;lByteCount<br>&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;lWordCount<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;MODULUS_BITS&nbsp;=&nbsp;512<br>&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;CONGRUENT_BITS&nbsp;=&nbsp;448<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;lMessageLength&nbsp;=&nbsp;Len(sMessage)<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;lNumberOfWords&nbsp;=&nbsp;(((lMessageLength&nbsp;+&nbsp;((MODULUS_BITS&nbsp;-&nbsp;CONGRUENT_BITS)&nbsp;/&nbsp;BITS_TO_A_BYTE))&nbsp;/&nbsp;(MODULUS_BITS&nbsp;/&nbsp;BITS_TO_A_BYTE))&nbsp;+&nbsp;1)&nbsp;*&nbsp;(MODULUS_BITS&nbsp;/&nbsp;BITS_TO_A_WORD)<br>&nbsp;&nbsp;&nbsp;&nbsp;ReDim&nbsp;lWordArray(lNumberOfWords&nbsp;-&nbsp;1)<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;lBytePosition&nbsp;=&nbsp;0<br>&nbsp;&nbsp;&nbsp;&nbsp;lByteCount&nbsp;=&nbsp;0<br>&nbsp;&nbsp;&nbsp;&nbsp;Do&nbsp;Until&nbsp;lByteCount&nbsp;&gt;=&nbsp;lMessageLength<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lWordCount&nbsp;=&nbsp;lByteCount&nbsp;/&nbsp;BYTES_TO_A_WORD<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lBytePosition&nbsp;=&nbsp;(lByteCount&nbsp;Mod&nbsp;BYTES_TO_A_WORD)&nbsp;*&nbsp;BITS_TO_A_BYTE<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lWordArray(lWordCount)&nbsp;=&nbsp;lWordArray(lWordCount)&nbsp;Or&nbsp;LShift(Asc(Mid(sMessage,&nbsp;lByteCount&nbsp;+&nbsp;1,&nbsp;1)),&nbsp;lBytePosition)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lByteCount&nbsp;=&nbsp;lByteCount&nbsp;+&nbsp;1<br>&nbsp;&nbsp;&nbsp;&nbsp;Loop<br><br>&nbsp;&nbsp;&nbsp;&nbsp;lWordCount&nbsp;=&nbsp;lByteCount&nbsp;/&nbsp;BYTES_TO_A_WORD<br>&nbsp;&nbsp;&nbsp;&nbsp;lBytePosition&nbsp;=&nbsp;(lByteCount&nbsp;Mod&nbsp;BYTES_TO_A_WORD)&nbsp;*&nbsp;BITS_TO_A_BYTE<br><br>&nbsp;&nbsp;&nbsp;&nbsp;lWordArray(lWordCount)&nbsp;=&nbsp;lWordArray(lWordCount)&nbsp;Or&nbsp;LShift(&amp;H80,&nbsp;lBytePosition)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;lWordArray(lNumberOfWords&nbsp;-&nbsp;2)&nbsp;=&nbsp;LShift(lMessageLength,&nbsp;3)<br>&nbsp;&nbsp;&nbsp;&nbsp;lWordArray(lNumberOfWords&nbsp;-&nbsp;1)&nbsp;=&nbsp;RShift(lMessageLength,&nbsp;29)<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;ConvertToWordArray&nbsp;=&nbsp;lWordArray<br>End&nbsp;Function<br><br>Private&nbsp;Function&nbsp;WordToHex(lValue)<br>&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;lByte<br>&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;lCount<br>&nbsp;&nbsp;&nbsp;&nbsp;dim&nbsp;strTmp<br>&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;lCount&nbsp;=&nbsp;3&nbsp;To&nbsp;0&nbsp;Step&nbsp;-1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lByte&nbsp;=&nbsp;RShift(lValue,&nbsp;lCount&nbsp;*&nbsp;BITS_TO_A_BYTE)&nbsp;And&nbsp;m_lOnBits(BITS_TO_A_BYTE&nbsp;-&nbsp;1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strTmp&nbsp;=&nbsp;strTmp&nbsp;&amp;&nbsp;Right(&quot;0&quot;&nbsp;&amp;&nbsp;Hex(lByte),&nbsp;2)<br>&nbsp;&nbsp;&nbsp;&nbsp;Next<br>&nbsp;WordToHex&nbsp;=&nbsp;mid(strTmp,7,2)&nbsp;&amp;&nbsp;mid(strTmp,5,2)&nbsp;&amp;&nbsp;mid(strTmp,3,2)&nbsp;&amp;&nbsp;mid(strTmp,1,2)<br>End&nbsp;Function<br><br>Public&nbsp;Function&nbsp;MD5(sMessage,iType)<br><br>if&nbsp;iType&nbsp;=&nbsp;0&nbsp;then<br>&nbsp;&nbsp;&nbsp;MD5&nbsp;=&nbsp;sMessage<br>else<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(0)&nbsp;=&nbsp;CLng(1)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(1)&nbsp;=&nbsp;CLng(3)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(2)&nbsp;=&nbsp;CLng(7)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(3)&nbsp;=&nbsp;CLng(15)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(4)&nbsp;=&nbsp;CLng(31)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(5)&nbsp;=&nbsp;CLng(63)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(6)&nbsp;=&nbsp;CLng(127)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(7)&nbsp;=&nbsp;CLng(255)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(8)&nbsp;=&nbsp;CLng(511)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(9)&nbsp;=&nbsp;CLng(1023)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(10)&nbsp;=&nbsp;CLng(2047)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(11)&nbsp;=&nbsp;CLng(4095)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(12)&nbsp;=&nbsp;CLng(8191)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(13)&nbsp;=&nbsp;CLng(16383)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(14)&nbsp;=&nbsp;CLng(32767)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(15)&nbsp;=&nbsp;CLng(65535)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(16)&nbsp;=&nbsp;CLng(131071)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(17)&nbsp;=&nbsp;CLng(262143)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(18)&nbsp;=&nbsp;CLng(524287)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(19)&nbsp;=&nbsp;CLng(1048575)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(20)&nbsp;=&nbsp;CLng(2097151)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(21)&nbsp;=&nbsp;CLng(4194303)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(22)&nbsp;=&nbsp;CLng(8388607)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(23)&nbsp;=&nbsp;CLng(16777215)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(24)&nbsp;=&nbsp;CLng(33554431)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(25)&nbsp;=&nbsp;CLng(67108863)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(26)&nbsp;=&nbsp;CLng(134217727)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(27)&nbsp;=&nbsp;CLng(268435455)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(28)&nbsp;=&nbsp;CLng(536870911)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(29)&nbsp;=&nbsp;CLng(1073741823)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(30)&nbsp;=&nbsp;CLng(2147483647)<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(0)&nbsp;=&nbsp;CLng(1)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(1)&nbsp;=&nbsp;CLng(2)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(2)&nbsp;=&nbsp;CLng(4)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(3)&nbsp;=&nbsp;CLng(8)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(4)&nbsp;=&nbsp;CLng(16)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(5)&nbsp;=&nbsp;CLng(32)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(6)&nbsp;=&nbsp;CLng(64)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(7)&nbsp;=&nbsp;CLng(128)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(8)&nbsp;=&nbsp;CLng(256)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(9)&nbsp;=&nbsp;CLng(512)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(10)&nbsp;=&nbsp;CLng(1024)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(11)&nbsp;=&nbsp;CLng(2048)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(12)&nbsp;=&nbsp;CLng(4096)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(13)&nbsp;=&nbsp;CLng(8192)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(14)&nbsp;=&nbsp;CLng(16384)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(15)&nbsp;=&nbsp;CLng(32768)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(16)&nbsp;=&nbsp;CLng(65536)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(17)&nbsp;=&nbsp;CLng(131072)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(18)&nbsp;=&nbsp;CLng(262144)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(19)&nbsp;=&nbsp;CLng(524288)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(20)&nbsp;=&nbsp;CLng(1048576)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(21)&nbsp;=&nbsp;CLng(2097152)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(22)&nbsp;=&nbsp;CLng(4194304)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(23)&nbsp;=&nbsp;CLng(8388608)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(24)&nbsp;=&nbsp;CLng(16777216)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(25)&nbsp;=&nbsp;CLng(33554432)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(26)&nbsp;=&nbsp;CLng(67108864)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(27)&nbsp;=&nbsp;CLng(134217728)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(28)&nbsp;=&nbsp;CLng(268435456)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(29)&nbsp;=&nbsp;CLng(536870912)<br>&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(30)&nbsp;=&nbsp;CLng(1073741824)<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;x<br>&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;k<br>&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;AA<br>&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;BB<br>&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;CC<br>&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;DD<br>&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;a<br>&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;b<br>&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;c<br>&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;d<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S11&nbsp;=&nbsp;7<br>&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S12&nbsp;=&nbsp;12<br>&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S13&nbsp;=&nbsp;17<br>&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S14&nbsp;=&nbsp;22<br>&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S21&nbsp;=&nbsp;5<br>&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S22&nbsp;=&nbsp;9<br>&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S23&nbsp;=&nbsp;14<br>&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S24&nbsp;=&nbsp;20<br>&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S31&nbsp;=&nbsp;4<br>&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S32&nbsp;=&nbsp;11<br>&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S33&nbsp;=&nbsp;16<br>&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S34&nbsp;=&nbsp;23<br>&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S41&nbsp;=&nbsp;6<br>&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S42&nbsp;=&nbsp;10<br>&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S43&nbsp;=&nbsp;15<br>&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S44&nbsp;=&nbsp;21<br><br>&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=&nbsp;ConvertToWordArray(sMessage)<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;&amp;H67452301<br>&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;=&nbsp;&amp;HEFCDAB89<br>&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;&amp;H98BADCFE<br>&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;=&nbsp;&amp;H10325476<br><br>&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;k&nbsp;=&nbsp;0&nbsp;To&nbsp;UBound(x)&nbsp;Step&nbsp;16<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AA&nbsp;=&nbsp;a<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BB&nbsp;=&nbsp;b<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CC&nbsp;=&nbsp;c<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DD&nbsp;=&nbsp;d<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;0),&nbsp;S11,&nbsp;&amp;HD76AA478<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;1),&nbsp;S12,&nbsp;&amp;HE8C7B756<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;2),&nbsp;S13,&nbsp;&amp;H242070DB<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;3),&nbsp;S14,&nbsp;&amp;HC1BDCEEE<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;4),&nbsp;S11,&nbsp;&amp;HF57C0FAF<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;5),&nbsp;S12,&nbsp;&amp;H4787C62A<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;6),&nbsp;S13,&nbsp;&amp;HA8304613<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;7),&nbsp;S14,&nbsp;&amp;HFD469501<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;8),&nbsp;S11,&nbsp;&amp;H698098D8<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;9),&nbsp;S12,&nbsp;&amp;H8B44F7AF<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;10),&nbsp;S13,&nbsp;&amp;HFFFF5BB1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;11),&nbsp;S14,&nbsp;&amp;H895CD7BE<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;12),&nbsp;S11,&nbsp;&amp;H6B901122<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;13),&nbsp;S12,&nbsp;&amp;HFD987193<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;14),&nbsp;S13,&nbsp;&amp;HA679438E<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;15),&nbsp;S14,&nbsp;&amp;H49B40821<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;1),&nbsp;S21,&nbsp;&amp;HF61E2562<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;6),&nbsp;S22,&nbsp;&amp;HC040B340<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;11),&nbsp;S23,&nbsp;&amp;H265E5A51<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;0),&nbsp;S24,&nbsp;&amp;HE9B6C7AA<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;5),&nbsp;S21,&nbsp;&amp;HD62F105D<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;10),&nbsp;S22,&nbsp;&amp;H2441453<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;15),&nbsp;S23,&nbsp;&amp;HD8A1E681<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;4),&nbsp;S24,&nbsp;&amp;HE7D3FBC8<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;9),&nbsp;S21,&nbsp;&amp;H21E1CDE6<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;14),&nbsp;S22,&nbsp;&amp;HC33707D6<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;3),&nbsp;S23,&nbsp;&amp;HF4D50D87<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;8),&nbsp;S24,&nbsp;&amp;H455A14ED<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;13),&nbsp;S21,&nbsp;&amp;HA9E3E905<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;2),&nbsp;S22,&nbsp;&amp;HFCEFA3F8<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;7),&nbsp;S23,&nbsp;&amp;H676F02D9<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;12),&nbsp;S24,&nbsp;&amp;H8D2A4C8A<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;5),&nbsp;S31,&nbsp;&amp;HFFFA3942<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;8),&nbsp;S32,&nbsp;&amp;H8771F681<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;11),&nbsp;S33,&nbsp;&amp;H6D9D6122<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;14),&nbsp;S34,&nbsp;&amp;HFDE5380C<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;1),&nbsp;S31,&nbsp;&amp;HA4BEEA44<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;4),&nbsp;S32,&nbsp;&amp;H4BDECFA9<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;7),&nbsp;S33,&nbsp;&amp;HF6BB4B60<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;10),&nbsp;S34,&nbsp;&amp;HBEBFBC70<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;13),&nbsp;S31,&nbsp;&amp;H289B7EC6<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;0),&nbsp;S32,&nbsp;&amp;HEAA127FA<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;3),&nbsp;S33,&nbsp;&amp;HD4EF3085<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;6),&nbsp;S34,&nbsp;&amp;H4881D05<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;9),&nbsp;S31,&nbsp;&amp;HD9D4D039<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;12),&nbsp;S32,&nbsp;&amp;HE6DB99E5<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;15),&nbsp;S33,&nbsp;&amp;H1FA27CF8<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;2),&nbsp;S34,&nbsp;&amp;HC4AC5665<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;0),&nbsp;S41,&nbsp;&amp;HF4292244<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;7),&nbsp;S42,&nbsp;&amp;H432AFF97<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;14),&nbsp;S43,&nbsp;&amp;HAB9423A7<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;5),&nbsp;S44,&nbsp;&amp;HFC93A039<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;12),&nbsp;S41,&nbsp;&amp;H655B59C3<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;3),&nbsp;S42,&nbsp;&amp;H8F0CCC92<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;10),&nbsp;S43,&nbsp;&amp;HFFEFF47D<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;1),&nbsp;S44,&nbsp;&amp;H85845DD1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;8),&nbsp;S41,&nbsp;&amp;H6FA87E4F<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;15),&nbsp;S42,&nbsp;&amp;HFE2CE6E0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;6),&nbsp;S43,&nbsp;&amp;HA3014314<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;13),&nbsp;S44,&nbsp;&amp;H4E0811A1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;4),&nbsp;S41,&nbsp;&amp;HF7537E82<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;11),&nbsp;S42,&nbsp;&amp;HBD3AF235<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;2),&nbsp;S43,&nbsp;&amp;H2AD7D2BB<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;9),&nbsp;S44,&nbsp;&amp;HEB86D391<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;AddUnsigned(a,&nbsp;AA)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;=&nbsp;AddUnsigned(b,&nbsp;BB)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;AddUnsigned(c,&nbsp;CC)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;=&nbsp;AddUnsigned(d,&nbsp;DD)<br>&nbsp;&nbsp;&nbsp;&nbsp;Next<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;MD5&nbsp;=&nbsp;WordToHex(a)&nbsp;&nbsp;&amp;&nbsp;WordToHex(b)&nbsp;&nbsp;&amp;&nbsp;WordToHex(c)&nbsp;&nbsp;&amp;&nbsp;WordToHex(d)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;'MD5=LCase(WordToHex(b)&nbsp;&amp;&nbsp;WordToHex(c))&nbsp;&nbsp;'I&nbsp;crop&nbsp;this&nbsp;to&nbsp;fit&nbsp;16byte&nbsp;database&nbsp;password&nbsp;:D<br>end&nbsp;if<br>End&nbsp;Function
 
unit&nbsp;md5;<br><br><br>//&nbsp;-----------------------------------------------------------------------------------------------&nbsp;<br>INTERFACE&nbsp;<br>//&nbsp;-----------------------------------------------------------------------------------------------&nbsp;<br><br>uses<br>Windows;&nbsp;<br><br>type&nbsp;<br>MD5Count&nbsp;=&nbsp;array[0..1]&nbsp;of&nbsp;DWORD;&nbsp;<br>MD5State&nbsp;=&nbsp;array[0..3]&nbsp;of&nbsp;DWORD;&nbsp;<br>MD5Block&nbsp;=&nbsp;array[0..15]&nbsp;of&nbsp;DWORD;&nbsp;<br>MD5CBits&nbsp;=&nbsp;array[0..7]&nbsp;of&nbsp;byte;&nbsp;<br>MD5Digest&nbsp;=&nbsp;array[0..15]&nbsp;of&nbsp;byte;&nbsp;<br>MD5Buffer&nbsp;=&nbsp;array[0..63]&nbsp;of&nbsp;byte;&nbsp;<br>MD5Context&nbsp;=&nbsp;record&nbsp;<br>State:&nbsp;MD5State;&nbsp;<br>Count:&nbsp;MD5Count;&nbsp;<br>Buffer:&nbsp;MD5Buffer;&nbsp;<br>end;&nbsp;<br><br>procedure&nbsp;MD5Init(var&nbsp;Context:&nbsp;MD5Context);&nbsp;<br>procedure&nbsp;MD5Update(var&nbsp;Context:&nbsp;MD5Context;&nbsp;Input:&nbsp;pChar;&nbsp;Length:&nbsp;longword);&nbsp;<br>procedure&nbsp;MD5Final(var&nbsp;Context:&nbsp;MD5Context;&nbsp;var&nbsp;Digest:&nbsp;MD5Digest);&nbsp;<br><br>function&nbsp;MD5String(M:&nbsp;string):&nbsp;MD5Digest;&nbsp;<br>function&nbsp;MD5File(N:&nbsp;string):&nbsp;MD5Digest;&nbsp;<br>function&nbsp;MD5Print(D:&nbsp;MD5Digest):&nbsp;string;&nbsp;<br><br>function&nbsp;MD5Match(D1,&nbsp;D2:&nbsp;MD5Digest):&nbsp;boolean;&nbsp;<br><br>//&nbsp;-----------------------------------------------------------------------------------------------&nbsp;<br>IMPLEMENTATION&nbsp;<br>//&nbsp;-----------------------------------------------------------------------------------------------&nbsp;<br><br>var&nbsp;<br>PADDING:&nbsp;MD5Buffer&nbsp;=&nbsp;(&nbsp;<br>$80,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;<br>$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;<br>$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;<br>$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;<br>$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;<br>$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;<br>$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;<br>$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00&nbsp;<br>);&nbsp;<br><br>function&nbsp;F(x,&nbsp;y,&nbsp;z:&nbsp;DWORD):&nbsp;DWORD;&nbsp;<br>begin&nbsp;<br>Result&nbsp;:=&nbsp;(x&nbsp;and&nbsp;y)&nbsp;or&nbsp;((not&nbsp;x)&nbsp;and&nbsp;z);&nbsp;<br>end;&nbsp;<br><br>function&nbsp;G(x,&nbsp;y,&nbsp;z:&nbsp;DWORD):&nbsp;DWORD;&nbsp;<br>begin&nbsp;<br>Result&nbsp;:=&nbsp;(x&nbsp;and&nbsp;z)&nbsp;or&nbsp;(y&nbsp;and&nbsp;(not&nbsp;z));&nbsp;<br>end;&nbsp;<br><br>function&nbsp;H(x,&nbsp;y,&nbsp;z:&nbsp;DWORD):&nbsp;DWORD;&nbsp;<br>begin&nbsp;<br>Result&nbsp;:=&nbsp;x&nbsp;xor&nbsp;y&nbsp;xor&nbsp;z;&nbsp;<br>end;&nbsp;<br><br>function&nbsp;I(x,&nbsp;y,&nbsp;z:&nbsp;DWORD):&nbsp;DWORD;&nbsp;<br>begin&nbsp;<br>Result&nbsp;:=&nbsp;y&nbsp;xor&nbsp;(x&nbsp;or&nbsp;(not&nbsp;z));&nbsp;<br>end;&nbsp;<br><br>procedure&nbsp;rot(var&nbsp;x:&nbsp;DWORD;&nbsp;n:&nbsp;BYTE);&nbsp;<br>begin&nbsp;<br>x&nbsp;:=&nbsp;(x&nbsp;shl&nbsp;n)&nbsp;or&nbsp;(x&nbsp;shr&nbsp;(32&nbsp;-&nbsp;n));&nbsp;<br>end;&nbsp;<br><br>procedure&nbsp;FF(var&nbsp;a:&nbsp;DWORD;&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x:&nbsp;DWORD;&nbsp;s:&nbsp;BYTE;&nbsp;ac:&nbsp;DWORD);&nbsp;<br>begin&nbsp;<br>inc(a,&nbsp;F(b,&nbsp;c,&nbsp;d)&nbsp;+&nbsp;x&nbsp;+&nbsp;ac);&nbsp;<br>rot(a,&nbsp;s);&nbsp;<br>inc(a,&nbsp;b);&nbsp;<br>end;&nbsp;<br><br>procedure&nbsp;GG(var&nbsp;a:&nbsp;DWORD;&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x:&nbsp;DWORD;&nbsp;s:&nbsp;BYTE;&nbsp;ac:&nbsp;DWORD);&nbsp;<br>begin&nbsp;<br>inc(a,&nbsp;G(b,&nbsp;c,&nbsp;d)&nbsp;+&nbsp;x&nbsp;+&nbsp;ac);&nbsp;<br>rot(a,&nbsp;s);&nbsp;<br>inc(a,&nbsp;b);&nbsp;<br>end;&nbsp;<br><br>procedure&nbsp;HH(var&nbsp;a:&nbsp;DWORD;&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x:&nbsp;DWORD;&nbsp;s:&nbsp;BYTE;&nbsp;ac:&nbsp;DWORD);&nbsp;<br>begin&nbsp;<br>inc(a,&nbsp;H(b,&nbsp;c,&nbsp;d)&nbsp;+&nbsp;x&nbsp;+&nbsp;ac);&nbsp;<br>rot(a,&nbsp;s);&nbsp;<br>inc(a,&nbsp;b);&nbsp;<br>end;&nbsp;<br><br>procedure&nbsp;II(var&nbsp;a:&nbsp;DWORD;&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x:&nbsp;DWORD;&nbsp;s:&nbsp;BYTE;&nbsp;ac:&nbsp;DWORD);&nbsp;<br>begin&nbsp;<br>inc(a,&nbsp;I(b,&nbsp;c,&nbsp;d)&nbsp;+&nbsp;x&nbsp;+&nbsp;ac);&nbsp;<br>rot(a,&nbsp;s);&nbsp;<br>inc(a,&nbsp;b);&nbsp;<br>end;&nbsp;<br><br>//&nbsp;-----------------------------------------------------------------------------------------------&nbsp;<br><br>//&nbsp;Encode&nbsp;Count&nbsp;bytes&nbsp;at&nbsp;Source&nbsp;into&nbsp;(Count&nbsp;/&nbsp;4)&nbsp;DWORDs&nbsp;at&nbsp;Target&nbsp;<br>procedure&nbsp;Encode(Source,&nbsp;Target:&nbsp;pointer;&nbsp;Count:&nbsp;longword);&nbsp;<br>var&nbsp;<br>S:&nbsp;PByte;&nbsp;<br>T:&nbsp;PDWORD;&nbsp;<br>I:&nbsp;longword;&nbsp;<br>begin&nbsp;<br>S&nbsp;:=&nbsp;Source;&nbsp;<br>T&nbsp;:=&nbsp;Target;&nbsp;<br>for&nbsp;I&nbsp;:=&nbsp;1&nbsp;to&nbsp;Count&nbsp;div&nbsp;4&nbsp;do&nbsp;begin&nbsp;<br>T^&nbsp;:=&nbsp;S^;&nbsp;<br>inc(S);&nbsp;<br>T^&nbsp;:=&nbsp;T^&nbsp;or&nbsp;(S^&nbsp;shl&nbsp;8);&nbsp;<br>inc(S);&nbsp;<br>T^&nbsp;:=&nbsp;T^&nbsp;or&nbsp;(S^&nbsp;shl&nbsp;16);&nbsp;<br>inc(S);&nbsp;<br>T^&nbsp;:=&nbsp;T^&nbsp;or&nbsp;(S^&nbsp;shl&nbsp;24);&nbsp;<br>inc(S);&nbsp;<br>inc(T);&nbsp;<br>end;&nbsp;<br>end;&nbsp;<br><br>//&nbsp;Decode&nbsp;Count&nbsp;DWORDs&nbsp;at&nbsp;Source&nbsp;into&nbsp;(Count&nbsp;*&nbsp;4)&nbsp;Bytes&nbsp;at&nbsp;Target&nbsp;<br>procedure&nbsp;Decode(Source,&nbsp;Target:&nbsp;pointer;&nbsp;Count:&nbsp;longword);&nbsp;<br>var&nbsp;<br>S:&nbsp;PDWORD;&nbsp;<br>T:&nbsp;PByte;&nbsp;<br>I:&nbsp;longword;&nbsp;<br>begin&nbsp;<br>S&nbsp;:=&nbsp;Source;&nbsp;<br>T&nbsp;:=&nbsp;Target;&nbsp;<br>for&nbsp;I&nbsp;:=&nbsp;1&nbsp;to&nbsp;Count&nbsp;do&nbsp;begin&nbsp;<br>T^&nbsp;:=&nbsp;S^&nbsp;and&nbsp;$ff;&nbsp;<br>inc(T);&nbsp;<br>T^&nbsp;:=&nbsp;(S^&nbsp;shr&nbsp;8)&nbsp;and&nbsp;$ff;&nbsp;<br>inc(T);&nbsp;<br>T^&nbsp;:=&nbsp;(S^&nbsp;shr&nbsp;16)&nbsp;and&nbsp;$ff;&nbsp;<br>inc(T);&nbsp;<br>T^&nbsp;:=&nbsp;(S^&nbsp;shr&nbsp;24)&nbsp;and&nbsp;$ff;&nbsp;<br>inc(T);&nbsp;<br>inc(S);&nbsp;<br>end;&nbsp;<br>end;&nbsp;<br><br>//&nbsp;Transform&nbsp;State&nbsp;according&nbsp;to&nbsp;first&nbsp;64&nbsp;bytes&nbsp;at&nbsp;Buffer&nbsp;<br>procedure&nbsp;Transform(Buffer:&nbsp;pointer;&nbsp;var&nbsp;State:&nbsp;MD5State);&nbsp;<br>var&nbsp;<br>a,&nbsp;b,&nbsp;c,&nbsp;d:&nbsp;DWORD;&nbsp;<br>Block:&nbsp;MD5Block;&nbsp;<br>begin&nbsp;<br>Encode(Buffer,&nbsp;@Block,&nbsp;64);&nbsp;<br>a&nbsp;:=&nbsp;State[0];&nbsp;<br>b&nbsp;:=&nbsp;State[1];&nbsp;<br>c&nbsp;:=&nbsp;State[2];&nbsp;<br>d&nbsp;:=&nbsp;State[3];&nbsp;<br>FF&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[&nbsp;0],&nbsp;7,&nbsp;$d76aa478);&nbsp;<br>FF&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[&nbsp;1],&nbsp;12,&nbsp;$e8c7b756);&nbsp;<br>FF&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[&nbsp;2],&nbsp;17,&nbsp;$242070db);&nbsp;<br>FF&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[&nbsp;3],&nbsp;22,&nbsp;$c1bdceee);&nbsp;<br>FF&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[&nbsp;4],&nbsp;7,&nbsp;$f57c0faf);&nbsp;<br>FF&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[&nbsp;5],&nbsp;12,&nbsp;$4787c62a);&nbsp;<br>FF&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[&nbsp;6],&nbsp;17,&nbsp;$a8304613);&nbsp;<br>FF&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[&nbsp;7],&nbsp;22,&nbsp;$fd469501);&nbsp;<br>FF&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[&nbsp;8],&nbsp;7,&nbsp;$698098d8);&nbsp;<br>FF&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[&nbsp;9],&nbsp;12,&nbsp;$8b44f7af);&nbsp;<br>FF&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[10],&nbsp;17,&nbsp;$ffff5bb1);&nbsp;<br>FF&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[11],&nbsp;22,&nbsp;$895cd7be);&nbsp;<br>FF&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[12],&nbsp;7,&nbsp;$6b901122);&nbsp;<br>FF&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[13],&nbsp;12,&nbsp;$fd987193);&nbsp;<br>FF&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[14],&nbsp;17,&nbsp;$a679438e);&nbsp;<br>FF&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[15],&nbsp;22,&nbsp;$49b40821);&nbsp;<br>GG&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[&nbsp;1],&nbsp;5,&nbsp;$f61e2562);&nbsp;<br>GG&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[&nbsp;6],&nbsp;9,&nbsp;$c040b340);&nbsp;<br>GG&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[11],&nbsp;14,&nbsp;$265e5a51);&nbsp;<br>GG&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[&nbsp;0],&nbsp;20,&nbsp;$e9b6c7aa);&nbsp;<br>GG&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[&nbsp;5],&nbsp;5,&nbsp;$d62f105d);&nbsp;<br>GG&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[10],&nbsp;9,&nbsp;$2441453);&nbsp;<br>GG&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[15],&nbsp;14,&nbsp;$d8a1e681);&nbsp;<br>GG&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[&nbsp;4],&nbsp;20,&nbsp;$e7d3fbc8);&nbsp;<br>GG&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[&nbsp;9],&nbsp;5,&nbsp;$21e1cde6);&nbsp;<br>GG&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[14],&nbsp;9,&nbsp;$c33707d6);&nbsp;<br>GG&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[&nbsp;3],&nbsp;14,&nbsp;$f4d50d87);&nbsp;<br>GG&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[&nbsp;8],&nbsp;20,&nbsp;$455a14ed);&nbsp;<br>GG&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[13],&nbsp;5,&nbsp;$a9e3e905);&nbsp;<br>GG&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[&nbsp;2],&nbsp;9,&nbsp;$fcefa3f8);&nbsp;<br>GG&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[&nbsp;7],&nbsp;14,&nbsp;$676f02d9);&nbsp;<br>GG&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[12],&nbsp;20,&nbsp;$8d2a4c8a);&nbsp;<br>HH&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[&nbsp;5],&nbsp;4,&nbsp;$fffa3942);&nbsp;<br>HH&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[&nbsp;8],&nbsp;11,&nbsp;$8771f681);&nbsp;<br>HH&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[11],&nbsp;16,&nbsp;$6d9d6122);&nbsp;<br>HH&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[14],&nbsp;23,&nbsp;$fde5380c);&nbsp;<br>HH&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[&nbsp;1],&nbsp;4,&nbsp;$a4beea44);&nbsp;<br>HH&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[&nbsp;4],&nbsp;11,&nbsp;$4bdecfa9);&nbsp;<br>HH&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[&nbsp;7],&nbsp;16,&nbsp;$f6bb4b60);&nbsp;<br>HH&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[10],&nbsp;23,&nbsp;$bebfbc70);&nbsp;<br>HH&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[13],&nbsp;4,&nbsp;$289b7ec6);&nbsp;<br>HH&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[&nbsp;0],&nbsp;11,&nbsp;$eaa127fa);&nbsp;<br>HH&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[&nbsp;3],&nbsp;16,&nbsp;$d4ef3085);&nbsp;<br>HH&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[&nbsp;6],&nbsp;23,&nbsp;$4881d05);&nbsp;<br>HH&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[&nbsp;9],&nbsp;4,&nbsp;$d9d4d039);&nbsp;<br>HH&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[12],&nbsp;11,&nbsp;$e6db99e5);&nbsp;<br>HH&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[15],&nbsp;16,&nbsp;$1fa27cf8);&nbsp;<br>HH&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[&nbsp;2],&nbsp;23,&nbsp;$c4ac5665);&nbsp;<br>II&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[&nbsp;0],&nbsp;6,&nbsp;$f4292244);&nbsp;<br>II&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[&nbsp;7],&nbsp;10,&nbsp;$432aff97);&nbsp;<br>II&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[14],&nbsp;15,&nbsp;$ab9423a7);&nbsp;<br>II&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[&nbsp;5],&nbsp;21,&nbsp;$fc93a039);&nbsp;<br>II&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[12],&nbsp;6,&nbsp;$655b59c3);&nbsp;<br>II&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[&nbsp;3],&nbsp;10,&nbsp;$8f0ccc92);&nbsp;<br>II&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[10],&nbsp;15,&nbsp;$ffeff47d);&nbsp;<br>II&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[&nbsp;1],&nbsp;21,&nbsp;$85845dd1);&nbsp;<br>II&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[&nbsp;8],&nbsp;6,&nbsp;$6fa87e4f);&nbsp;<br>II&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[15],&nbsp;10,&nbsp;$fe2ce6e0);&nbsp;<br>II&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[&nbsp;6],&nbsp;15,&nbsp;$a3014314);&nbsp;<br>II&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[13],&nbsp;21,&nbsp;$4e0811a1);&nbsp;<br>II&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[&nbsp;4],&nbsp;6,&nbsp;$f7537e82);&nbsp;<br>II&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[11],&nbsp;10,&nbsp;$bd3af235);&nbsp;<br>II&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[&nbsp;2],&nbsp;15,&nbsp;$2ad7d2bb);&nbsp;<br>II&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[&nbsp;9],&nbsp;21,&nbsp;$eb86d391);&nbsp;<br>inc(State[0],&nbsp;a);&nbsp;<br>inc(State[1],&nbsp;b);&nbsp;<br>inc(State[2],&nbsp;c);&nbsp;<br>inc(State[3],&nbsp;d);&nbsp;<br>end;&nbsp;<br><br>//&nbsp;-----------------------------------------------------------------------------------------------&nbsp;<br><br>//&nbsp;Initialize&nbsp;given&nbsp;Context&nbsp;<br>procedure&nbsp;MD5Init(var&nbsp;Context:&nbsp;MD5Context);&nbsp;<br>begin&nbsp;<br>with&nbsp;Context&nbsp;do&nbsp;begin&nbsp;<br>State[0]&nbsp;:=&nbsp;$67452301;&nbsp;<br>State[1]&nbsp;:=&nbsp;$efcdab89;&nbsp;<br>State[2]&nbsp;:=&nbsp;$98badcfe;&nbsp;<br>State[3]&nbsp;:=&nbsp;$10325476;&nbsp;<br>Count[0]&nbsp;:=&nbsp;0;&nbsp;<br>Count[1]&nbsp;:=&nbsp;0;&nbsp;<br>ZeroMemory(@Buffer,&nbsp;SizeOf(MD5Buffer));&nbsp;<br>end;&nbsp;<br>end;&nbsp;<br><br>//&nbsp;Update&nbsp;given&nbsp;Context&nbsp;to&nbsp;include&nbsp;Length&nbsp;bytes&nbsp;of&nbsp;Input&nbsp;<br>procedure&nbsp;MD5Update(var&nbsp;Context:&nbsp;MD5Context;&nbsp;Input:&nbsp;pChar;&nbsp;Length:&nbsp;longword);&nbsp;<br>var&nbsp;<br>Index:&nbsp;longword;&nbsp;<br>PartLen:&nbsp;longword;&nbsp;<br>I:&nbsp;longword;&nbsp;<br>begin&nbsp;<br>with&nbsp;Context&nbsp;do&nbsp;begin&nbsp;<br>Index&nbsp;:=&nbsp;(Count[0]&nbsp;shr&nbsp;3)&nbsp;and&nbsp;$3f;&nbsp;<br>inc(Count[0],&nbsp;Length&nbsp;shl&nbsp;3);&nbsp;<br>if&nbsp;Count[0]&nbsp;&lt;&nbsp;(Length&nbsp;shl&nbsp;3)&nbsp;then&nbsp;inc(Count[1]);&nbsp;<br>inc(Count[1],&nbsp;Length&nbsp;shr&nbsp;29);&nbsp;<br>end;&nbsp;<br>PartLen&nbsp;:=&nbsp;64&nbsp;-&nbsp;Index;&nbsp;<br>if&nbsp;Length&nbsp;&gt;=&nbsp;PartLen&nbsp;then&nbsp;begin&nbsp;<br>CopyMemory(@Context.Buffer[Index],&nbsp;Input,&nbsp;PartLen);&nbsp;<br>Transform(@Context.Buffer,&nbsp;Context.State);&nbsp;<br>I&nbsp;:=&nbsp;PartLen;&nbsp;<br>while&nbsp;I&nbsp;+&nbsp;63&nbsp;&lt;&nbsp;Length&nbsp;do&nbsp;begin&nbsp;<br>Transform(@Input,&nbsp;Context.State);&nbsp;<br>inc(I,&nbsp;64);&nbsp;<br>end;&nbsp;<br>Index&nbsp;:=&nbsp;0;&nbsp;<br>end&nbsp;else&nbsp;I&nbsp;:=&nbsp;0;&nbsp;<br>CopyMemory(@Context.Buffer[Index],&nbsp;@Input,&nbsp;Length&nbsp;-&nbsp;I);&nbsp;<br>end;&nbsp;<br><br>//&nbsp;Finalize&nbsp;given&nbsp;Context,&nbsp;create&nbsp;Digest&nbsp;and&nbsp;zeroize&nbsp;Context&nbsp;<br>procedure&nbsp;MD5Final(var&nbsp;Context:&nbsp;MD5Context;&nbsp;var&nbsp;Digest:&nbsp;MD5Digest);&nbsp;<br>var&nbsp;<br>Bits:&nbsp;MD5CBits;&nbsp;<br>Index:&nbsp;longword;&nbsp;<br>PadLen:&nbsp;longword;&nbsp;<br>begin&nbsp;<br>Decode(@Context.Count,&nbsp;@Bits,&nbsp;2);&nbsp;<br>Index&nbsp;:=&nbsp;(Context.Count[0]&nbsp;shr&nbsp;3)&nbsp;and&nbsp;$3f;&nbsp;<br>if&nbsp;Index&nbsp;&lt;&nbsp;56&nbsp;then&nbsp;PadLen&nbsp;:=&nbsp;56&nbsp;-&nbsp;Index&nbsp;else&nbsp;PadLen&nbsp;:=&nbsp;120&nbsp;-&nbsp;Index;&nbsp;<br>MD5Update(Context,&nbsp;@PADDING,&nbsp;PadLen);&nbsp;<br>MD5Update(Context,&nbsp;@Bits,&nbsp;8);&nbsp;<br>Decode(@Context.State,&nbsp;@Digest,&nbsp;4);&nbsp;<br>ZeroMemory(@Context,&nbsp;SizeOf(MD5Context));&nbsp;<br>end;&nbsp;<br><br>//&nbsp;-----------------------------------------------------------------------------------------------&nbsp;<br><br>//&nbsp;Create&nbsp;digest&nbsp;of&nbsp;given&nbsp;Message&nbsp;<br>function&nbsp;MD5String(M:&nbsp;string):&nbsp;MD5Digest;&nbsp;<br>var&nbsp;<br>Context:&nbsp;MD5Context;&nbsp;<br>begin&nbsp;<br>MD5Init(Context);&nbsp;<br>MD5Update(Context,&nbsp;pChar(M),&nbsp;length(M));&nbsp;<br>MD5Final(Context,&nbsp;Result);&nbsp;<br>end;&nbsp;<br><br>//&nbsp;Create&nbsp;digest&nbsp;of&nbsp;file&nbsp;with&nbsp;given&nbsp;Name&nbsp;<br>function&nbsp;MD5File(N:&nbsp;string):&nbsp;MD5Digest;&nbsp;<br>var&nbsp;<br>FileHandle:&nbsp;THandle;&nbsp;<br>MapHandle:&nbsp;THandle;&nbsp;<br>ViewPointer:&nbsp;pointer;&nbsp;<br>Context:&nbsp;MD5Context;&nbsp;<br>begin&nbsp;<br>MD5Init(Context);&nbsp;<br>FileHandle&nbsp;:=&nbsp;CreateFile(pChar(N),&nbsp;GENERIC_READ,&nbsp;FILE_SHARE_READ&nbsp;or&nbsp;FILE_SHARE_WRITE,&nbsp;<br>nil,&nbsp;OPEN_EXISTING,&nbsp;FILE_ATTRIBUTE_NORMAL&nbsp;or&nbsp;FILE_FLAG_SEQUENTIAL_SCAN,&nbsp;0);&nbsp;<br>if&nbsp;FileHandle&nbsp;&lt;&gt;&nbsp;INVALID_HANDLE_value&nbsp;then&nbsp;try&nbsp;<br>MapHandle&nbsp;:=&nbsp;CreateFileMapping(FileHandle,&nbsp;nil,&nbsp;PAGE_READONLY,&nbsp;0,&nbsp;0,&nbsp;nil);&nbsp;<br>if&nbsp;MapHandle&nbsp;&lt;&gt;&nbsp;0&nbsp;then&nbsp;try&nbsp;<br>ViewPointer&nbsp;:=&nbsp;MapViewOfFile(MapHandle,&nbsp;FILE_MAP_READ,&nbsp;0,&nbsp;0,&nbsp;0);&nbsp;<br>if&nbsp;ViewPointer&nbsp;&lt;&gt;&nbsp;nil&nbsp;then&nbsp;try&nbsp;<br>MD5Update(Context,&nbsp;ViewPointer,&nbsp;GetFileSize(FileHandle,&nbsp;nil));&nbsp;<br>finally&nbsp;<br>UnmapViewOfFile(ViewPointer);&nbsp;<br>end;&nbsp;<br>finally&nbsp;<br>CloseHandle(MapHandle);&nbsp;<br>end;&nbsp;<br>finally&nbsp;<br>CloseHandle(FileHandle);&nbsp;<br>end;&nbsp;<br>MD5Final(Context,&nbsp;Result);&nbsp;<br>end;&nbsp;<br><br>//&nbsp;Create&nbsp;hex&nbsp;representation&nbsp;of&nbsp;given&nbsp;Digest&nbsp;<br>function&nbsp;MD5Print(D:&nbsp;MD5Digest):&nbsp;string;&nbsp;<br>var&nbsp;<br>I:&nbsp;byte;&nbsp;<br>const&nbsp;<br>Digits:&nbsp;array[0..15]&nbsp;of&nbsp;char&nbsp;=&nbsp;<br>('0',&nbsp;'1',&nbsp;'2',&nbsp;'3',&nbsp;'4',&nbsp;'5',&nbsp;'6',&nbsp;'7',&nbsp;'8',&nbsp;'9',&nbsp;'a',&nbsp;'b',&nbsp;'c',&nbsp;'d',&nbsp;'e',&nbsp;'f');&nbsp;<br>begin&nbsp;<br>Result&nbsp;:=&nbsp;'';&nbsp;<br>for&nbsp;I&nbsp;:=&nbsp;0&nbsp;to&nbsp;15&nbsp;do&nbsp;Result&nbsp;:=&nbsp;Result&nbsp;+&nbsp;Digits[(D&nbsp;shr&nbsp;4)&nbsp;and&nbsp;$0f]&nbsp;+&nbsp;Digits[D&nbsp;and&nbsp;$0f];&nbsp;<br>end;&nbsp;<br><br>//&nbsp;-----------------------------------------------------------------------------------------------&nbsp;<br><br>//&nbsp;Compare&nbsp;two&nbsp;Digests&nbsp;<br>function&nbsp;MD5Match(D1,&nbsp;D2:&nbsp;MD5Digest):&nbsp;boolean;&nbsp;<br>var&nbsp;<br>I:&nbsp;byte;&nbsp;<br>begin<br>I&nbsp;:=&nbsp;0;&nbsp;<br>Result&nbsp;:=&nbsp;TRUE;&nbsp;<br>while&nbsp;Result&nbsp;and&nbsp;(I&nbsp;&lt;&nbsp;16)&nbsp;do&nbsp;begin&nbsp;<br>Result&nbsp;:=&nbsp;D1&nbsp;=&nbsp;D2;&nbsp;<br>inc(I);&nbsp;<br>end;&nbsp;<br>end;&nbsp;<br><br>end.
 
LZ散尽家财哇~~<br>败家子~~
 
嘿,vb我们用的双鱼的加密~~
 
你想说什么啊?
 
后退
顶部