<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>凉风集 &#187; c#</title>
	<atom:link href="http://www.lifangjin.com/archives/tag/c/feed" rel="self" type="application/rss+xml" />
	<link>http://www.lifangjin.com</link>
	<description>李方进的个人BLOG</description>
	<lastBuildDate>Tue, 10 Aug 2010 11:02:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>delphi和c#的MD5加密(32位)</title>
		<link>http://www.lifangjin.com/archives/91</link>
		<comments>http://www.lifangjin.com/archives/91#comments</comments>
		<pubDate>Fri, 24 Mar 2006 05:10:55 +0000</pubDate>
		<dc:creator>李 方进</dc:creator>
				<category><![CDATA[开发编程]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[MD5]]></category>

		<guid isPermaLink="false">http://www.lifangjin.com/?p=91</guid>
		<description><![CDATA[c#代码: System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(string ,&#8221;MD5&#8243;); delphi代码: {*_* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Author:       Fran鏾is PIETTE. Based on work given by Louis S. Berman from               BrainTree Ltd, lsb@braintree.com Description:  MD5 is an implmentation for the MD5 Message-Digest Algorithm               as described in RFC-1321 Creation:     October 11, 1997 Version:      1.03 EMail:        http://users.swing.be/francois.piette  francois.piette@swing.be               http://www.rtfm.be/fpiette             francois.piette@rtfm.be               francois.piette@pophost.eunet.be Support:      Use the mailing list twsocket@rtfm.be See website for details. Legal issues: Copyright (C) 1997, 1998 by Fran鏾is PIETTE               Rue de Grady 24, 4053 Embourg, Belgium. Fax: +32-4-365.74.56               &#60;francois.piette@pophost.eunet.be&#62;               This software is provided &#8217;as-is&#8217;, without any express or               implied warranty.  In no event will the author be held liable               for any  damages arising from the use of this software.               Permission is granted to anyone to use this software for any               purpose, including commercial applications, and to alter it               and redistribute it freely, subject to the following               restrictions:               1. The origin of this software must not be misrepresented,                  you must not claim that you wrote the original software.                  If you use this software in a product, an acknowledgment                  in the product documentation would be appreciated but is                  not required.               2. Altered source versions must be plainly marked as such, and                  must not be misrepresented as being the original software.               3. This notice may not be removed or altered from any source                  distribution.               4. You must register this software by sending a picture postcard                  to the author. Use a nice stamp and mention your name, street                  address, EMail address and any comment you like to say. Updates: Oct 26, 1997 Changed MD5Final form function to procedure to be compatible              with C++Builder. Jul 09, 1998 V1.01 Adapted for Delphi 4 Aug 06, 1998 V1.02 Added R- Q- directive Jun 05, 1999 V1.03 Wolfgang Klein found a bug in MD5Update. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} unit MD5; interface uses     SysUtils; const     MD5Version         = 102;     CopyRight : String = &#8217; MD5 Message-Digest (c) 97-98 F. Piette V1.02 &#8217;; {$Q-} {$R-} type     TMD5Context = record         State: array[0..3] of LongInt; [...]]]></description>
			<content:encoded><![CDATA[<p>c#代码:<br />
System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(string ,&#8221;<a href="http://www.lifangjin.com/archives/tag/md5" class="st_tag internal_tag" rel="tag" title="Posts tagged with MD5">MD5</a>&#8243;);</p>
<p><a href="http://www.lifangjin.com/archives/tag/delphi" class="st_tag internal_tag" rel="tag" title="Posts tagged with Delphi">delphi</a>代码:<br />
{*_* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</p>
<p>Author:       Fran鏾is PIETTE. Based on work given by Louis S. Berman from<br />
              BrainTree Ltd, lsb@braintree.com<br />
Description:  <a href="http://www.lifangjin.com/archives/tag/md5" class="st_tag internal_tag" rel="tag" title="Posts tagged with MD5">MD5</a> is an implmentation for the <a href="http://www.lifangjin.com/archives/tag/md5" class="st_tag internal_tag" rel="tag" title="Posts tagged with MD5">MD5</a> Message-Digest Algorithm<br />
              as described in RFC-1321<br />
Creation:     October 11, 1997<br />
Version:      1.03<br />
EMail:        http://users.swing.be/francois.piette  francois.piette@swing.be<br />
              http://www.rtfm.be/fpiette             francois.piette@rtfm.be<br />
              francois.piette@pophost.eunet.be<br />
Support:      Use the mailing list twsocket@rtfm.be See website for details.<br />
Legal issues: Copyright (C) 1997, 1998 by Fran鏾is PIETTE<br />
              Rue de Grady 24, 4053 Embourg, Belgium. Fax: +32-4-365.74.56<br />
              &lt;francois.piette@pophost.eunet.be&gt;</p>
<p>              This software is provided &#8217;as-is&#8217;, without any express or<br />
              implied warranty.  In no event will the author be held liable<br />
              for any  damages arising from the use of this software.</p>
<p>              Permission is granted to anyone to use this software for any<br />
              purpose, including commercial applications, and to alter it<br />
              and redistribute it freely, subject to the following<br />
              restrictions:</p>
<p>              1. The origin of this software must not be misrepresented,<br />
                 you must not claim that you wrote the original software.<br />
                 If you use this software in a product, an acknowledgment<br />
                 in the product documentation would be appreciated but is<br />
                 not required.</p>
<p>              2. Altered source versions must be plainly marked as such, and<br />
                 must not be misrepresented as being the original software.</p>
<p>              3. This notice may not be removed or altered from any source<br />
                 distribution.</p>
<p>              4. You must register this software by sending a picture postcard<br />
                 to the author. Use a nice stamp and mention your name, street<br />
                 address, EMail address and any comment you like to say.</p>
<p>Updates:<br />
Oct 26, 1997 Changed MD5Final form function to procedure to be compatible<br />
             with C++Builder.<br />
Jul 09, 1998 V1.01 Adapted for <a href="http://www.lifangjin.com/archives/tag/delphi" class="st_tag internal_tag" rel="tag" title="Posts tagged with Delphi">Delphi</a> 4<br />
Aug 06, 1998 V1.02 Added R- Q- directive<br />
Jun 05, 1999 V1.03 Wolfgang Klein found a bug in MD5Update.</p>
<p>* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}<br />
unit <a href="http://www.lifangjin.com/archives/tag/md5" class="st_tag internal_tag" rel="tag" title="Posts tagged with MD5">MD5</a>;</p>
<p>interface</p>
<p>uses<br />
    SysUtils;</p>
<p>const<br />
    MD5Version         = 102;<br />
    CopyRight : String = &#8217; <a href="http://www.lifangjin.com/archives/tag/md5" class="st_tag internal_tag" rel="tag" title="Posts tagged with MD5">MD5</a> Message-Digest (c) 97-98 F. Piette V1.02 &#8217;;</p>
<p>{$Q-}<br />
{$R-}</p>
<p>type<br />
    TMD5Context = record<br />
        State: array[0..3] of LongInt;<br />
        Count: array[0..1] of LongInt;<br />
        case Integer of<br />
        0: (BufChar: array[0..63] of Byte);<br />
        1: (BufLong: array[0..15] of LongInt);<br />
    end;<br />
    TMD5Digest = array[0..15] of Char;</p>
<p>procedure MD5Init(var MD5Context: TMD5Context);<br />
procedure MD5Update(var MD5Context: TMD5Context;<br />
                    const Data;<br />
                    Len: Integer);<br />
procedure MD5Transform(var Buf: array of LongInt;<br />
                       const Data: array of LongInt);<br />
procedure MD5UpdateBuffer(var MD5Context: TMD5Context;<br />
                          Buffer: Pointer;<br />
                          BufSize: Integer);<br />
procedure MD5Final(var Digest: TMD5Digest; var MD5Context: TMD5Context);</p>
<p>function GetMD5(Buffer: Pointer; BufSize: Integer): string;<br />
function StrMD5(Buffer : String): string;</p>
<p>implementation</p>
<p>const<br />
    MaxBufSize = 16384;</p>
<p>type<br />
    PMD5Buffer = ^TMD5Buffer;<br />
    TMD5Buffer = array[0..(MaxBufSize - 1)] of Char;</p>
<p>{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}<br />
{ <a href="http://www.lifangjin.com/archives/tag/md5" class="st_tag internal_tag" rel="tag" title="Posts tagged with MD5">MD5</a> initialization. Begins an <a href="http://www.lifangjin.com/archives/tag/md5" class="st_tag internal_tag" rel="tag" title="Posts tagged with MD5">MD5</a> operation, writing a new context.         }<br />
procedure MD5Init(var MD5Context: TMD5Context);<br />
begin<br />
    FillChar(MD5Context, SizeOf(TMD5Context), #0);<br />
    with MD5Context do begin<br />
        { Load magic initialization constants. }<br />
        State[0] := LongInt($67452301);<br />
        State[1] := LongInt($EFCDAB89);<br />
        State[2] := LongInt($98BADCFE);<br />
        State[3] := LongInt($10325476);<br />
    end<br />
end;</p>
<p>{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}<br />
{ <a href="http://www.lifangjin.com/archives/tag/md5" class="st_tag internal_tag" rel="tag" title="Posts tagged with MD5">MD5</a> block update operation. Continues an <a href="http://www.lifangjin.com/archives/tag/md5" class="st_tag internal_tag" rel="tag" title="Posts tagged with MD5">MD5</a> message-digest operation,      }<br />
{ processing another message block, and updating the context.                 }<br />
procedure MD5Update(<br />
    var MD5Context: TMD5Context;            { Context                         }<br />
    const Data;                             { Input block                     }<br />
    Len: Integer);                          { Length of input block           }<br />
type<br />
    TByteArray = array[0..0] of Byte;<br />
var<br />
    Index: Word;<br />
    T: LongInt;<br />
begin<br />
    with MD5Context do begin<br />
        T := Count[0];<br />
        Inc(Count[0], LongInt(Len) shl 3);<br />
        if Count[0] &lt; T then<br />
            Inc(Count[1]);<br />
        Inc(Count[1], Len shr 29);<br />
        T := (T shr 3) and $3F;<br />
        Index := 0;<br />
        if T &lt;&gt; 0 then begin<br />
            Index := T;<br />
            T := 64 - T;<br />
            if Len &lt; T then begin<br />
                Move(Data, BufChar[Index], Len);<br />
                Exit;<br />
            end;<br />
            Move(Data, BufChar[Index], T);<br />
            MD5Transform(State, BufLong);<br />
            Dec(Len, T);<br />
            Index := T;  { Wolfgang Klein, 05/06/99 }<br />
        end;<br />
        while Len &gt;= 64 do begin<br />
            Move(TByteArray(Data)[Index], BufChar, 64);<br />
            MD5Transform(State, BufLong);<br />
            Inc(Index, 64);<br />
            Dec(Len, 64);<br />
        end;<br />
        Move(TByteArray(Data)[Index], BufChar, Len);<br />
    end<br />
end;</p>
<p>{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}<br />
{ <a href="http://www.lifangjin.com/archives/tag/md5" class="st_tag internal_tag" rel="tag" title="Posts tagged with MD5">MD5</a> finalization. Ends an <a href="http://www.lifangjin.com/archives/tag/md5" class="st_tag internal_tag" rel="tag" title="Posts tagged with MD5">MD5</a> message-digest operation, writing the message }<br />
{ digest and zeroizing the context.                                           }<br />
procedure MD5Final(var Digest: TMD5Digest; var MD5Context: TMD5Context);<br />
var<br />
    Cnt : Word;<br />
    P   : Byte;<br />
begin<br />
    with MD5Context do begin<br />
        Cnt := (Count[0] shr 3) and $3F;<br />
        P := Cnt;<br />
        BufChar[P] := $80;<br />
        Inc(P);<br />
        Cnt := 64 - 1 - Cnt;<br />
        if Cnt &lt; 8 then begin<br />
            FillChar(BufChar[P], Cnt, #0);<br />
            MD5Transform(State, BufLong);<br />
            FillChar(BufChar, 56, #0);<br />
        end<br />
        else<br />
            FillChar(BufChar[P], Cnt - 8, #0);<br />
        BufLong[14] := Count[0];<br />
        BufLong[15] := Count[1];<br />
        MD5Transform(State, BufLong);<br />
        Move(State, Digest, 16)<br />
    end;<br />
    FillChar(MD5Context, SizeOf(TMD5Context), #0)<br />
end;</p>
<p>{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}<br />
{ <a href="http://www.lifangjin.com/archives/tag/md5" class="st_tag internal_tag" rel="tag" title="Posts tagged with MD5">MD5</a> basic transformation. Transforms state based on block.                  }<br />
procedure MD5Transform(<br />
    var Buf: array of LongInt;<br />
    const Data: array of LongInt);<br />
var<br />
    A, B, C, D: LongInt;</p>
<p>    procedure Round1(var W: LongInt; X, Y, Z, Data: LongInt; S: Byte);<br />
    begin<br />
        Inc(W, (Z xor (X and (Y xor Z))) + Data);<br />
        W := (W shl S) or (W shr (32 - S));<br />
        Inc(W, X)<br />
    end;</p>
<p>    procedure Round2(var W: LongInt; X, Y, Z, Data: LongInt; S: Byte);<br />
    begin<br />
        Inc(W, (Y xor (Z and (X xor Y))) + Data);<br />
        W := (W shl S) or (W shr (32 - S));<br />
        Inc(W, X)<br />
    end;</p>
<p>    procedure Round3(var W: LongInt; X, Y, Z, Data: LongInt; S: Byte);<br />
    begin<br />
        Inc(W, (X xor Y xor Z) + Data);<br />
        W := (W shl S) or (W shr (32 - S));<br />
        Inc(W, X)<br />
    end;</p>
<p>    procedure Round4(var W: LongInt; X, Y, Z, Data: LongInt; S: Byte);<br />
    begin<br />
        Inc(W, (Y xor (X or not Z)) + Data);<br />
        W := (W shl S) or (W shr (32 - S));<br />
        Inc(W, X)<br />
    end;<br />
begin<br />
    A := Buf[0];<br />
    B := Buf[1];<br />
    C := Buf[2];<br />
    D := Buf[3];</p>
<p>    Round1(A, B, C, D, Data[ 0] + LongInt($d76aa478),  7);<br />
    Round1(D, A, B, C, Data[ 1] + LongInt($e8c7b756), 12);<br />
    Round1(C, D, A, B, Data[ 2] + LongInt($242070db), 17);<br />
    Round1(B, C, D, A, Data[ 3] + LongInt($c1bdceee), 22);<br />
    Round1(A, B, C, D, Data[ 4] + LongInt($f57c0faf),  7);<br />
    Round1(D, A, B, C, Data[ 5] + LongInt($4787c62a), 12);<br />
    Round1(C, D, A, B, Data[ 6] + LongInt($a8304613), 17);<br />
    Round1(B, C, D, A, Data[ 7] + LongInt($fd469501), 22);<br />
    Round1(A, B, C, D, Data[ 8] + LongInt($698098d8),  7);<br />
    Round1(D, A, B, C, Data[ 9] + LongInt($8b44f7af), 12);<br />
    Round1(C, D, A, B, Data[10] + LongInt($ffff5bb1), 17);<br />
    Round1(B, C, D, A, Data[11] + LongInt($895cd7be), 22);<br />
    Round1(A, B, C, D, Data[12] + LongInt($6b901122),  7);<br />
    Round1(D, A, B, C, Data[13] + LongInt($fd987193), 12);<br />
    Round1(C, D, A, B, Data[14] + LongInt($a679438e), 17);<br />
    Round1(B, C, D, A, Data[15] + LongInt($49b40821), 22);</p>
<p>    Round2(A, B, C, D, Data[ 1] + LongInt($f61e2562),  5);<br />
    Round2(D, A, B, C, Data[ 6] + LongInt($c040b340),  9);<br />
    Round2(C, D, A, B, Data[11] + LongInt($265e5a51), 14);<br />
    Round2(B, C, D, A, Data[ 0] + LongInt($e9b6c7aa), 20);<br />
    Round2(A, B, C, D, Data[ 5] + LongInt($d62f105d),  5);<br />
    Round2(D, A, B, C, Data[10] + LongInt($02441453),  9);<br />
    Round2(C, D, A, B, Data[15] + LongInt($d8a1e681), 14);<br />
    Round2(B, C, D, A, Data[ 4] + LongInt($e7d3fbc8), 20);<br />
    Round2(A, B, C, D, Data[ 9] + LongInt($21e1cde6),  5);<br />
    Round2(D, A, B, C, Data[14] + LongInt($c33707d6),  9);<br />
    Round2(C, D, A, B, Data[ 3] + LongInt($f4d50d87), 14);<br />
    Round2(B, C, D, A, Data[ 8] + LongInt($455a14ed), 20);<br />
    Round2(A, B, C, D, Data[13] + LongInt($a9e3e905),  5);<br />
    Round2(D, A, B, C, Data[ 2] + LongInt($fcefa3f8),  9);<br />
    Round2(C, D, A, B, Data[ 7] + LongInt($676f02d9), 14);<br />
    Round2(B, C, D, A, Data[12] + LongInt($8d2a4c8a), 20);</p>
<p>    Round3(A, B, C, D, Data[ 5] + LongInt($fffa3942),  4);<br />
    Round3(D, A, B, C, Data[ 8] + LongInt($8771f681), 11);<br />
    Round3(C, D, A, B, Data[11] + LongInt($6d9d6122), 16);<br />
    Round3(B, C, D, A, Data[14] + LongInt($fde5380c), 23);<br />
    Round3(A, B, C, D, Data[ 1] + LongInt($a4beea44),  4);<br />
    Round3(D, A, B, C, Data[ 4] + LongInt($4bdecfa9), 11);<br />
    Round3(C, D, A, B, Data[ 7] + LongInt($f6bb4b60), 16);<br />
    Round3(B, C, D, A, Data[10] + LongInt($bebfbc70), 23);<br />
    Round3(A, B, C, D, Data[13] + LongInt($289b7ec6),  4);<br />
    Round3(D, A, B, C, Data[ 0] + LongInt($eaa127fa), 11);<br />
    Round3(C, D, A, B, Data[ 3] + LongInt($d4ef3085), 16);<br />
    Round3(B, C, D, A, Data[ 6] + LongInt($04881d05), 23);<br />
    Round3(A, B, C, D, Data[ 9] + LongInt($d9d4d039),  4);<br />
    Round3(D, A, B, C, Data[12] + LongInt($e6db99e5), 11);<br />
    Round3(C, D, A, B, Data[15] + LongInt($1fa27cf8), 16);<br />
    Round3(B, C, D, A, Data[ 2] + LongInt($c4ac5665), 23);</p>
<p>    Round4(A, B, C, D, Data[ 0] + LongInt($f4292244),  6);<br />
    Round4(D, A, B, C, Data[ 7] + LongInt($432aff97), 10);<br />
    Round4(C, D, A, B, Data[14] + LongInt($ab9423a7), 15);<br />
    Round4(B, C, D, A, Data[ 5] + LongInt($fc93a039), 21);<br />
    Round4(A, B, C, D, Data[12] + LongInt($655b59c3),  6);<br />
    Round4(D, A, B, C, Data[ 3] + LongInt($8f0ccc92), 10);<br />
    Round4(C, D, A, B, Data[10] + LongInt($ffeff47d), 15);<br />
    Round4(B, C, D, A, Data[ 1] + LongInt($85845dd1), 21);<br />
    Round4(A, B, C, D, Data[ 8] + LongInt($6fa87e4f),  6);<br />
    Round4(D, A, B, C, Data[15] + LongInt($fe2ce6e0), 10);<br />
    Round4(C, D, A, B, Data[ 6] + LongInt($a3014314), 15);<br />
    Round4(B, C, D, A, Data[13] + LongInt($4e0811a1), 21);<br />
    Round4(A, B, C, D, Data[ 4] + LongInt($f7537e82),  6);<br />
    Round4(D, A, B, C, Data[11] + LongInt($bd3af235), 10);<br />
    Round4(C, D, A, B, Data[ 2] + LongInt($2ad7d2bb), 15);<br />
    Round4(B, C, D, A, Data[ 9] + LongInt($eb86d391), 21);</p>
<p>    Inc(Buf[0], A);<br />
    Inc(Buf[1], B);<br />
    Inc(Buf[2], C);<br />
    Inc(Buf[3], D);<br />
end;</p>
<p>{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}<br />
procedure MD5UpdateBuffer(<br />
    var MD5Context: TMD5Context;<br />
    Buffer: Pointer;<br />
    BufSize: Integer);<br />
var<br />
    BufTmp : PMD5Buffer;<br />
    BufPtr : PChar;<br />
    Bytes  : Word;<br />
begin<br />
    New(BufTmp);<br />
    BufPtr := Buffer;<br />
    try<br />
        repeat<br />
            if BufSize &gt; MaxBufSize then<br />
                Bytes := MaxBufSize<br />
            else<br />
                Bytes := BufSize;<br />
            Move(BufPtr^, BufTmp^, Bytes);<br />
            Inc(BufPtr, Bytes);<br />
            Dec(BufSize, Bytes);<br />
            if Bytes &gt; 0 then<br />
                MD5Update(MD5Context, BufTmp^, Bytes);<br />
        until Bytes &lt; MaxBufSize;<br />
    finally<br />
        Dispose(BufTmp);<br />
    end;<br />
end;</p>
<p>{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}<br />
function GetMD5(Buffer: Pointer; BufSize: Integer): string;<br />
var<br />
    I          : Integer;<br />
    MD5Digest  : TMD5Digest;<br />
    MD5Context : TMD5Context;<br />
begin<br />
    for I := 0 to 15 do<br />
        Byte(MD5Digest[I]) := I + 1;<br />
    MD5Init(MD5Context);<br />
    MD5UpdateBuffer(MD5Context, Buffer, BufSize);<br />
    MD5Final(MD5Digest, MD5Context);<br />
    Result := &#8221;;<br />
    for I := 0 to 15 do<br />
        Result := Result + IntToHex(Byte(MD5Digest[I]), 2);<br />
end;</p>
<p>{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}<br />
function StrMD5(Buffer : String): string;<br />
begin<br />
    Result := GetMD5(@Buffer[1], Length(Buffer));<br />
end;</p>
<p>{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}</p>
<p>end.</p>
<p>两种方法32位<a href="http://www.lifangjin.com/archives/tag/md5" class="st_tag internal_tag" rel="tag" title="Posts tagged with MD5">MD5</a>加密后的结果一样.<br />
&#8212;&#8211;</p>

	<h4>相关文章</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.lifangjin.com/archives/581" title="二三事 (November 10, 2008)">二三事</a> (0)</li>
	<li><a href="http://www.lifangjin.com/archives/351" title="尝试在delphi开发过程中使用LUA进行扩展 (June 13, 2007)">尝试在delphi开发过程中使用LUA进行扩展</a> (1)</li>
	<li><a href="http://www.lifangjin.com/archives/89" title="在delphi中调用webservice (March 1, 2006)">在delphi中调用webservice</a> (1)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.lifangjin.com/archives/91/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
