关于delphi的MD5加密 ( 积分: 30 )

  • 主题发起人 主题发起人 softlong
  • 开始时间 开始时间
S

softlong

Unregistered / Unconfirmed
GUEST, unregistred user!
我在vb6里用到了md5加密算法对系统加密。<br>现在想用delphi写个注册机,添加注册日志。但我用在delphi6里用md5加过密后的字符串怎么不和我vb里一样呢?怎么解决啊?
 
急啊,在线等!
 
//&nbsp;tabs&nbsp;=&nbsp;2<br>//&nbsp;-----------------------------------------------------------------------------------------------<br>//<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MD5&nbsp;Message-Digest&nbsp;for&nbsp;Delphi&nbsp;4<br>//<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delphi&nbsp;4&nbsp;Unit&nbsp;implementing&nbsp;the<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RSA&nbsp;Data&nbsp;Security,&nbsp;Inc.&nbsp;MD5&nbsp;Message-Digest&nbsp;Algorithm<br>//<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Implementation&nbsp;of&nbsp;Ronald&nbsp;L.&nbsp;Rivest's&nbsp;RFC&nbsp;1321<br>//<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copyright&nbsp;?1997-1999&nbsp;Medienagentur&nbsp;Fichtner&nbsp;&amp;&nbsp;Meyer<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Written&nbsp;by&nbsp;Matthias&nbsp;Fichtner<br>//<br>//&nbsp;-----------------------------------------------------------------------------------------------<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;See&nbsp;RFC&nbsp;1321&nbsp;for&nbsp;RSA&nbsp;Data&nbsp;Security's&nbsp;copyright&nbsp;and&nbsp;license&nbsp;notice!<br>//&nbsp;-----------------------------------------------------------------------------------------------<br>//<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14-Jun-97&nbsp;&nbsp;mf&nbsp;&nbsp;Implemented&nbsp;MD5&nbsp;according&nbsp;to&nbsp;RFC&nbsp;1321&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RFC&nbsp;1321<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16-Jun-97&nbsp;&nbsp;mf&nbsp;&nbsp;Initial&nbsp;release&nbsp;of&nbsp;the&nbsp;compiled&nbsp;unit&nbsp;(no&nbsp;source&nbsp;code)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RFC&nbsp;1321<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;28-Feb-99&nbsp;&nbsp;mf&nbsp;&nbsp;Added&nbsp;MD5Match&nbsp;function&nbsp;for&nbsp;comparing&nbsp;two&nbsp;digests&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RFC&nbsp;1321<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13-Sep-99&nbsp;&nbsp;mf&nbsp;&nbsp;Reworked&nbsp;the&nbsp;entire&nbsp;unit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RFC&nbsp;1321<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;17-Sep-99&nbsp;&nbsp;mf&nbsp;&nbsp;Reworked&nbsp;the&nbsp;&quot;Test&nbsp;Driver&quot;&nbsp;project&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RFC&nbsp;1321<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19-Sep-99&nbsp;&nbsp;mf&nbsp;&nbsp;Release&nbsp;of&nbsp;sources&nbsp;for&nbsp;MD5&nbsp;unit&nbsp;and&nbsp;&quot;Test&nbsp;Driver&quot;&nbsp;project&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RFC&nbsp;1321<br>//<br>//&nbsp;-----------------------------------------------------------------------------------------------<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;latest&nbsp;release&nbsp;of&nbsp;md5.pas&nbsp;will&nbsp;always&nbsp;be&nbsp;available&nbsp;from<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;distribution&nbsp;site&nbsp;at:&nbsp;http://www.fichtner.net/delphi/md5/<br>//&nbsp;-----------------------------------------------------------------------------------------------<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Please&nbsp;send&nbsp;questions,&nbsp;bug&nbsp;reports&nbsp;and&nbsp;suggestions<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regarding&nbsp;this&nbsp;code&nbsp;to:&nbsp;mfichtner@fichtner-meyer.com<br>//&nbsp;-----------------------------------------------------------------------------------------------<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;code&nbsp;is&nbsp;provided&nbsp;&quot;as&nbsp;is&quot;&nbsp;without&nbsp;express&nbsp;or<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;implied&nbsp;warranty&nbsp;of&nbsp;any&nbsp;kind.&nbsp;Use&nbsp;it&nbsp;at&nbsp;your&nbsp;own&nbsp;risk.<br>//&nbsp;-----------------------------------------------------------------------------------------------<br><br>unit&nbsp;md5;<br><br>//&nbsp;-----------------------------------------------------------------------------------------------<br>INTERFACE<br>//&nbsp;-----------------------------------------------------------------------------------------------<br><br>uses<br> Windows;<br><br>type<br> MD5Count&nbsp;=&nbsp;array[0..1]&nbsp;of&nbsp;DWORD;<br> MD5State&nbsp;=&nbsp;array[0..3]&nbsp;of&nbsp;DWORD;<br> MD5Block&nbsp;=&nbsp;array[0..15]&nbsp;of&nbsp;DWORD;<br> MD5CBits&nbsp;=&nbsp;array[0..7]&nbsp;of&nbsp;byte;<br> MD5Digest&nbsp;=&nbsp;array[0..15]&nbsp;of&nbsp;byte;<br> MD5Buffer&nbsp;=&nbsp;array[0..63]&nbsp;of&nbsp;byte;<br> MD5Context&nbsp;=&nbsp;record<br> State:&nbsp;MD5State;<br> Count:&nbsp;MD5Count;<br> Buffer:&nbsp;MD5Buffer;<br> end;<br><br>procedure&nbsp;MD5Init(var&nbsp;Context:&nbsp;MD5Context);<br>procedure&nbsp;MD5Update(var&nbsp;Context:&nbsp;MD5Context;&nbsp;Input:&nbsp;pChar;&nbsp;Length:&nbsp;longword);<br>procedure&nbsp;MD5Final(var&nbsp;Context:&nbsp;MD5Context;&nbsp;var&nbsp;Digest:&nbsp;MD5Digest);<br><br>function&nbsp;MD5String(M:&nbsp;string):&nbsp;MD5Digest;<br>function&nbsp;MD5File(N:&nbsp;string):&nbsp;MD5Digest;<br>function&nbsp;MD5Print(D:&nbsp;MD5Digest):&nbsp;string;<br><br>function&nbsp;MD5Match(D1,&nbsp;D2:&nbsp;MD5Digest):&nbsp;boolean;<br><br>//&nbsp;-----------------------------------------------------------------------------------------------<br>IMPLEMENTATION<br>//&nbsp;-----------------------------------------------------------------------------------------------<br><br>var<br> PADDING:&nbsp;MD5Buffer&nbsp;=&nbsp;(<br> $80,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,<br> $00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,<br> $00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,<br> $00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,<br> $00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,<br> $00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,<br> $00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,<br> $00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00,&nbsp;$00<br> );<br><br>function&nbsp;F(x,&nbsp;y,&nbsp;z:&nbsp;DWORD):&nbsp;DWORD;<br>begin<br> Result&nbsp;:=&nbsp;(x&nbsp;and&nbsp;y)&nbsp;or&nbsp;((not&nbsp;x)&nbsp;and&nbsp;z);<br>end;<br><br>function&nbsp;G(x,&nbsp;y,&nbsp;z:&nbsp;DWORD):&nbsp;DWORD;<br>begin<br> Result&nbsp;:=&nbsp;(x&nbsp;and&nbsp;z)&nbsp;or&nbsp;(y&nbsp;and&nbsp;(not&nbsp;z));<br>end;<br><br>function&nbsp;H(x,&nbsp;y,&nbsp;z:&nbsp;DWORD):&nbsp;DWORD;<br>begin<br> Result&nbsp;:=&nbsp;x&nbsp;xor&nbsp;y&nbsp;xor&nbsp;z;<br>end;<br><br>function&nbsp;I(x,&nbsp;y,&nbsp;z:&nbsp;DWORD):&nbsp;DWORD;<br>begin<br> Result&nbsp;:=&nbsp;y&nbsp;xor&nbsp;(x&nbsp;or&nbsp;(not&nbsp;z));<br>end;<br><br>procedure&nbsp;rot(var&nbsp;x:&nbsp;DWORD;&nbsp;n:&nbsp;BYTE);<br>begin<br> x&nbsp;:=&nbsp;(x&nbsp;shl&nbsp;n)&nbsp;or&nbsp;(x&nbsp;shr&nbsp;(32&nbsp;-&nbsp;n));<br>end;<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);<br>begin<br> inc(a,&nbsp;F(b,&nbsp;c,&nbsp;d)&nbsp;+&nbsp;x&nbsp;+&nbsp;ac);<br> rot(a,&nbsp;s);<br> inc(a,&nbsp;b);<br>end;<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);<br>begin<br> inc(a,&nbsp;G(b,&nbsp;c,&nbsp;d)&nbsp;+&nbsp;x&nbsp;+&nbsp;ac);<br> rot(a,&nbsp;s);<br> inc(a,&nbsp;b);<br>end;<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);<br>begin<br> inc(a,&nbsp;H(b,&nbsp;c,&nbsp;d)&nbsp;+&nbsp;x&nbsp;+&nbsp;ac);<br> rot(a,&nbsp;s);<br> inc(a,&nbsp;b);<br>end;<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);<br>begin<br> inc(a,&nbsp;I(b,&nbsp;c,&nbsp;d)&nbsp;+&nbsp;x&nbsp;+&nbsp;ac);<br> rot(a,&nbsp;s);<br> inc(a,&nbsp;b);<br>end;<br><br>//&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<br>procedure&nbsp;Encode(Source,&nbsp;Target:&nbsp;pointer;&nbsp;Count:&nbsp;longword);<br>var<br> S:&nbsp;PByte;<br> T:&nbsp;PDWORD;<br> I:&nbsp;longword;<br>begin<br> S&nbsp;:=&nbsp;Source;<br> T&nbsp;:=&nbsp;Target;<br> for&nbsp;I&nbsp;:=&nbsp;1&nbsp;to&nbsp;Count&nbsp;div&nbsp;4&nbsp;do&nbsp;begin<br> T^&nbsp;:=&nbsp;S^;<br> inc(S);<br> T^&nbsp;:=&nbsp;T^&nbsp;or&nbsp;(S^&nbsp;shl&nbsp;8);<br> inc(S);<br> T^&nbsp;:=&nbsp;T^&nbsp;or&nbsp;(S^&nbsp;shl&nbsp;16);<br> inc(S);<br> T^&nbsp;:=&nbsp;T^&nbsp;or&nbsp;(S^&nbsp;shl&nbsp;24);<br> inc(S);<br> inc(T);<br> end;<br>end;<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<br>procedure&nbsp;Decode(Source,&nbsp;Target:&nbsp;pointer;&nbsp;Count:&nbsp;longword);<br>var<br> S:&nbsp;PDWORD;<br> T:&nbsp;PByte;<br> I:&nbsp;longword;<br>begin<br> S&nbsp;:=&nbsp;Source;<br> T&nbsp;:=&nbsp;Target;<br> for&nbsp;I&nbsp;:=&nbsp;1&nbsp;to&nbsp;Count&nbsp;do&nbsp;begin<br> T^&nbsp;:=&nbsp;S^&nbsp;and&nbsp;$ff;<br> inc(T);<br> T^&nbsp;:=&nbsp;(S^&nbsp;shr&nbsp;8)&nbsp;and&nbsp;$ff;<br> inc(T);<br> T^&nbsp;:=&nbsp;(S^&nbsp;shr&nbsp;16)&nbsp;and&nbsp;$ff;<br> inc(T);<br> T^&nbsp;:=&nbsp;(S^&nbsp;shr&nbsp;24)&nbsp;and&nbsp;$ff;<br> inc(T);<br> inc(S);<br> end;<br>end;<br><br>//&nbsp;Transform&nbsp;State&nbsp;according&nbsp;to&nbsp;first&nbsp;64&nbsp;bytes&nbsp;at&nbsp;Buffer<br>procedure&nbsp;Transform(Buffer:&nbsp;pointer;&nbsp;var&nbsp;State:&nbsp;MD5State);<br>var<br> a,&nbsp;b,&nbsp;c,&nbsp;d:&nbsp;DWORD;<br> Block:&nbsp;MD5Block;<br>begin<br> Encode(Buffer,&nbsp;@Block,&nbsp;64);<br> a&nbsp;:=&nbsp;State[0];<br> b&nbsp;:=&nbsp;State[1];<br> c&nbsp;:=&nbsp;State[2];<br> d&nbsp;:=&nbsp;State[3];<br> FF&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[&nbsp;0],&nbsp;&nbsp;7,&nbsp;$d76aa478);<br> FF&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[&nbsp;1],&nbsp;12,&nbsp;$e8c7b756);<br> FF&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[&nbsp;2],&nbsp;17,&nbsp;$242070db);<br> FF&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[&nbsp;3],&nbsp;22,&nbsp;$c1bdceee);<br> FF&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[&nbsp;4],&nbsp;&nbsp;7,&nbsp;$f57c0faf);<br> FF&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[&nbsp;5],&nbsp;12,&nbsp;$4787c62a);<br> FF&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[&nbsp;6],&nbsp;17,&nbsp;$a8304613);<br> FF&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[&nbsp;7],&nbsp;22,&nbsp;$fd469501);<br> FF&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[&nbsp;8],&nbsp;&nbsp;7,&nbsp;$698098d8);<br> FF&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[&nbsp;9],&nbsp;12,&nbsp;$8b44f7af);<br> FF&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[10],&nbsp;17,&nbsp;$ffff5bb1);<br> FF&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[11],&nbsp;22,&nbsp;$895cd7be);<br> FF&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[12],&nbsp;&nbsp;7,&nbsp;$6b901122);<br> FF&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[13],&nbsp;12,&nbsp;$fd987193);<br> FF&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[14],&nbsp;17,&nbsp;$a679438e);<br> FF&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[15],&nbsp;22,&nbsp;$49b40821);<br> GG&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[&nbsp;1],&nbsp;&nbsp;5,&nbsp;$f61e2562);<br> GG&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[&nbsp;6],&nbsp;&nbsp;9,&nbsp;$c040b340);<br> GG&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[11],&nbsp;14,&nbsp;$265e5a51);<br> GG&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[&nbsp;0],&nbsp;20,&nbsp;$e9b6c7aa);<br> GG&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[&nbsp;5],&nbsp;&nbsp;5,&nbsp;$d62f105d);<br> GG&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[10],&nbsp;&nbsp;9,&nbsp;&nbsp;$2441453);<br> GG&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[15],&nbsp;14,&nbsp;$d8a1e681);<br> GG&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[&nbsp;4],&nbsp;20,&nbsp;$e7d3fbc8);<br> GG&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[&nbsp;9],&nbsp;&nbsp;5,&nbsp;$21e1cde6);<br> GG&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[14],&nbsp;&nbsp;9,&nbsp;$c33707d6);<br> GG&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[&nbsp;3],&nbsp;14,&nbsp;$f4d50d87);<br> GG&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[&nbsp;8],&nbsp;20,&nbsp;$455a14ed);<br> GG&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[13],&nbsp;&nbsp;5,&nbsp;$a9e3e905);<br> GG&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[&nbsp;2],&nbsp;&nbsp;9,&nbsp;$fcefa3f8);<br> GG&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[&nbsp;7],&nbsp;14,&nbsp;$676f02d9);<br> GG&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[12],&nbsp;20,&nbsp;$8d2a4c8a);<br> HH&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[&nbsp;5],&nbsp;&nbsp;4,&nbsp;$fffa3942);<br> HH&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[&nbsp;8],&nbsp;11,&nbsp;$8771f681);<br> HH&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[11],&nbsp;16,&nbsp;$6d9d6122);<br> HH&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[14],&nbsp;23,&nbsp;$fde5380c);<br> HH&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[&nbsp;1],&nbsp;&nbsp;4,&nbsp;$a4beea44);<br> HH&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[&nbsp;4],&nbsp;11,&nbsp;$4bdecfa9);<br> HH&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[&nbsp;7],&nbsp;16,&nbsp;$f6bb4b60);<br> HH&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[10],&nbsp;23,&nbsp;$bebfbc70);<br> HH&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[13],&nbsp;&nbsp;4,&nbsp;$289b7ec6);<br> HH&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[&nbsp;0],&nbsp;11,&nbsp;$eaa127fa);<br> HH&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[&nbsp;3],&nbsp;16,&nbsp;$d4ef3085);<br> HH&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[&nbsp;6],&nbsp;23,&nbsp;&nbsp;$4881d05);<br> HH&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[&nbsp;9],&nbsp;&nbsp;4,&nbsp;$d9d4d039);<br> HH&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[12],&nbsp;11,&nbsp;$e6db99e5);<br> HH&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[15],&nbsp;16,&nbsp;$1fa27cf8);<br> HH&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[&nbsp;2],&nbsp;23,&nbsp;$c4ac5665);<br> II&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[&nbsp;0],&nbsp;&nbsp;6,&nbsp;$f4292244);<br> II&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[&nbsp;7],&nbsp;10,&nbsp;$432aff97);<br> II&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[14],&nbsp;15,&nbsp;$ab9423a7);<br> II&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[&nbsp;5],&nbsp;21,&nbsp;$fc93a039);<br> II&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[12],&nbsp;&nbsp;6,&nbsp;$655b59c3);<br> II&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[&nbsp;3],&nbsp;10,&nbsp;$8f0ccc92);<br> II&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[10],&nbsp;15,&nbsp;$ffeff47d);<br> II&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[&nbsp;1],&nbsp;21,&nbsp;$85845dd1);<br> II&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[&nbsp;8],&nbsp;&nbsp;6,&nbsp;$6fa87e4f);<br> II&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[15],&nbsp;10,&nbsp;$fe2ce6e0);<br> II&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[&nbsp;6],&nbsp;15,&nbsp;$a3014314);<br> II&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[13],&nbsp;21,&nbsp;$4e0811a1);<br> II&nbsp;(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;Block[&nbsp;4],&nbsp;&nbsp;6,&nbsp;$f7537e82);<br> II&nbsp;(d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;Block[11],&nbsp;10,&nbsp;$bd3af235);<br> II&nbsp;(c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;Block[&nbsp;2],&nbsp;15,&nbsp;$2ad7d2bb);<br> II&nbsp;(b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;Block[&nbsp;9],&nbsp;21,&nbsp;$eb86d391);<br> inc(State[0],&nbsp;a);<br> inc(State[1],&nbsp;b);<br> inc(State[2],&nbsp;c);<br> inc(State[3],&nbsp;d);<br>end;<br><br>//&nbsp;-----------------------------------------------------------------------------------------------<br><br>//&nbsp;Initialize&nbsp;given&nbsp;Context<br>procedure&nbsp;MD5Init(var&nbsp;Context:&nbsp;MD5Context);<br>begin<br> with&nbsp;Context&nbsp;do&nbsp;begin<br> State[0]&nbsp;:=&nbsp;$67452301;<br> State[1]&nbsp;:=&nbsp;$efcdab89;<br> State[2]&nbsp;:=&nbsp;$98badcfe;<br> State[3]&nbsp;:=&nbsp;$10325476;<br> Count[0]&nbsp;:=&nbsp;0;<br> Count[1]&nbsp;:=&nbsp;0;<br> ZeroMemory(@Buffer,&nbsp;SizeOf(MD5Buffer));<br> end;<br>end;<br><br>//&nbsp;Update&nbsp;given&nbsp;Context&nbsp;to&nbsp;include&nbsp;Length&nbsp;bytes&nbsp;of&nbsp;Input<br>procedure&nbsp;MD5Update(var&nbsp;Context:&nbsp;MD5Context;&nbsp;Input:&nbsp;pChar;&nbsp;Length:&nbsp;longword);<br>var<br> Index:&nbsp;longword;<br> PartLen:&nbsp;longword;<br> I:&nbsp;longword;<br>begin<br> with&nbsp;Context&nbsp;do&nbsp;begin<br> Index&nbsp;:=&nbsp;(Count[0]&nbsp;shr&nbsp;3)&nbsp;and&nbsp;$3f;<br> inc(Count[0],&nbsp;Length&nbsp;shl&nbsp;3);<br> if&nbsp;Count[0]&nbsp;&lt;&nbsp;(Length&nbsp;shl&nbsp;3)&nbsp;then&nbsp;inc(Count[1]);<br> inc(Count[1],&nbsp;Length&nbsp;shr&nbsp;29);<br> end;<br> PartLen&nbsp;:=&nbsp;64&nbsp;-&nbsp;Index;<br> if&nbsp;Length&nbsp;&gt;=&nbsp;PartLen&nbsp;then&nbsp;begin<br> CopyMemory(@Context.Buffer[Index],&nbsp;Input,&nbsp;PartLen);<br> Transform(@Context.Buffer,&nbsp;Context.State);<br> I&nbsp;:=&nbsp;PartLen;<br> while&nbsp;I&nbsp;+&nbsp;63&nbsp;&lt;&nbsp;Length&nbsp;do&nbsp;begin<br> Transform(@Input,&nbsp;Context.State);<br> inc(I,&nbsp;64);<br> end;<br> Index&nbsp;:=&nbsp;0;<br> end&nbsp;else&nbsp;I&nbsp;:=&nbsp;0;<br> CopyMemory(@Context.Buffer[Index],&nbsp;@Input,&nbsp;Length&nbsp;-&nbsp;I);<br>end;<br><br>//&nbsp;Finalize&nbsp;given&nbsp;Context,&nbsp;create&nbsp;Digest&nbsp;and&nbsp;zeroize&nbsp;Context<br>procedure&nbsp;MD5Final(var&nbsp;Context:&nbsp;MD5Context;&nbsp;var&nbsp;Digest:&nbsp;MD5Digest);<br>var<br> Bits:&nbsp;MD5CBits;<br> Index:&nbsp;longword;<br> PadLen:&nbsp;longword;<br>begin<br> Decode(@Context.Count,&nbsp;@Bits,&nbsp;2);<br> Index&nbsp;:=&nbsp;(Context.Count[0]&nbsp;shr&nbsp;3)&nbsp;and&nbsp;$3f;<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;<br> MD5Update(Context,&nbsp;@PADDING,&nbsp;PadLen);<br> MD5Update(Context,&nbsp;@Bits,&nbsp;8);<br> Decode(@Context.State,&nbsp;@Digest,&nbsp;4);<br> ZeroMemory(@Context,&nbsp;SizeOf(MD5Context));<br>end;<br><br>//&nbsp;-----------------------------------------------------------------------------------------------<br><br>//&nbsp;Create&nbsp;digest&nbsp;of&nbsp;given&nbsp;Message<br>function&nbsp;MD5String(M:&nbsp;string):&nbsp;MD5Digest;<br>var<br> Context:&nbsp;MD5Context;<br>begin<br> MD5Init(Context);<br> MD5Update(Context,&nbsp;pChar(M),&nbsp;length(M));<br> MD5Final(Context,&nbsp;Result);<br>end;<br><br>//&nbsp;Create&nbsp;digest&nbsp;of&nbsp;file&nbsp;with&nbsp;given&nbsp;Name<br>function&nbsp;MD5File(N:&nbsp;string):&nbsp;MD5Digest;<br>var<br> FileHandle:&nbsp;THandle;<br> MapHandle:&nbsp;THandle;<br> ViewPointer:&nbsp;pointer;<br> Context:&nbsp;MD5Context;<br>begin<br> MD5Init(Context);<br> FileHandle&nbsp;:=&nbsp;CreateFile(pChar(N),&nbsp;GENERIC_READ,&nbsp;FILE_SHARE_READ&nbsp;or&nbsp;FILE_SHARE_WRITE,<br> nil,&nbsp;OPEN_EXISTING,&nbsp;FILE_ATTRIBUTE_NORMAL&nbsp;or&nbsp;FILE_FLAG_SEQUENTIAL_SCAN,&nbsp;0);<br> if&nbsp;FileHandle&nbsp;&lt;&gt;&nbsp;INVALID_HANDLE_VALUE&nbsp;then&nbsp;try<br> MapHandle&nbsp;:=&nbsp;CreateFileMapping(FileHandle,&nbsp;nil,&nbsp;PAGE_READONLY,&nbsp;0,&nbsp;0,&nbsp;nil);<br> if&nbsp;MapHandle&nbsp;&lt;&gt;&nbsp;0&nbsp;then&nbsp;try<br> ViewPointer&nbsp;:=&nbsp;MapViewOfFile(MapHandle,&nbsp;FILE_MAP_READ,&nbsp;0,&nbsp;0,&nbsp;0);<br> if&nbsp;ViewPointer&nbsp;&lt;&gt;&nbsp;nil&nbsp;then&nbsp;try<br> MD5Update(Context,&nbsp;ViewPointer,&nbsp;GetFileSize(FileHandle,&nbsp;nil));<br> finally<br> UnmapViewOfFile(ViewPointer);<br> end;<br> finally<br> CloseHandle(MapHandle);<br> end;<br> finally<br> CloseHandle(FileHandle);<br> end;<br> MD5Final(Context,&nbsp;Result);<br>end;<br><br>//&nbsp;Create&nbsp;hex&nbsp;representation&nbsp;of&nbsp;given&nbsp;Digest<br>function&nbsp;MD5Print(D:&nbsp;MD5Digest):&nbsp;string;<br>var<br> I:&nbsp;byte;<br>const<br> Digits:&nbsp;array[0..15]&nbsp;of&nbsp;char&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');<br>begin<br> Result&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];<br>end;<br><br>//&nbsp;-----------------------------------------------------------------------------------------------<br><br>//&nbsp;Compare&nbsp;two&nbsp;Digests<br>function&nbsp;MD5Match(D1,&nbsp;D2:&nbsp;MD5Digest):&nbsp;boolean;<br>var<br> I:&nbsp;byte;<br>begin<br> I&nbsp;:=&nbsp;0;<br> Result&nbsp;:=&nbsp;TRUE;<br> while&nbsp;Result&nbsp;and&nbsp;(I&nbsp;&lt;&nbsp;16)&nbsp;do&nbsp;begin<br> Result&nbsp;:=&nbsp;D1&nbsp;=&nbsp;D2;<br> inc(I);<br> end;<br>end;<br><br>end.
 
在delphi中我已经通过md5对字符串加密了,我想问的是,对于同一个字符串,为什么在delphi中的md5加密与vb6中的md5加密之后的字符串不一样。<br>比如:<br>对706545925进行加密:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在delphi&nbsp;md5加密为:43976c73a00f1c7613eeb1c1d68f9d3b<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在vb6&nbsp;&nbsp;md5加密为:a00f1c7613eeb1c1<br>为什么不一样呢?两个工具我都只用了md5中的函数。为什么不一样呢???<br><br>多谢了楼上了
 
你找一个16位的<br>好像是从第9位取16位,即&nbsp;md5_16&nbsp;=&nbsp;Copy(md5_32,&nbsp;9,&nbsp;16);
 
晕<br><br>一个32位一个16位<br>怎么会可能一样<br><br>呵呵<br>仔细看下你的MD5函数把
 
我提供的是32位的<br>你找一个16位的就可以了
 
非常感谢你们的指点!谢谢了!
 
忘了<br>^_^
 
后退
顶部