<?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>No Money No Honey &#187; 加密演算</title>
	<atom:link href="http://blog.infinity.idv.tw/index.php/category/delphi/%e5%8a%a0%e5%af%86%e6%bc%94%e7%ae%97/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.infinity.idv.tw</link>
	<description>Just Another Beginning</description>
	<lastBuildDate>Sat, 28 Jan 2012 18:25:36 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>DELPHI使用AES加解密密碼</title>
		<link>http://blog.infinity.idv.tw/index.php/2009/10/09/delphi%e4%bd%bf%e7%94%a8aes%e5%8a%a0%e8%a7%a3%e5%af%86%e5%af%86%e7%a2%bc/</link>
		<comments>http://blog.infinity.idv.tw/index.php/2009/10/09/delphi%e4%bd%bf%e7%94%a8aes%e5%8a%a0%e8%a7%a3%e5%af%86%e5%af%86%e7%a2%bc/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 10:10:44 +0000</pubDate>
		<dc:creator>Roger Lin</dc:creator>
				<category><![CDATA[加密演算]]></category>

		<guid isPermaLink="false">http://blog.infinity.idv.tw/index.php/2009/10/09/delphi%e4%bd%bf%e7%94%a8aes%e5%8a%a0%e8%a7%a3%e5%af%86%e5%af%86%e7%a2%bc/</guid>
		<description><![CDATA[<p>這通常是運用在資料庫內有密碼的時候，不希望顯示的是明碼，所以要透過加密解密的動作來實現這個需求，這邊使用的是AES加密功能。</p>
<p>DELPHI 用的 AES 檔案 下載</p>
<p>此範例程式(D7)已含AES檔案：下載</p>
<p>程式執行：</p>
<p>將字串加密    </p>
<p>將字串解密還原    </p>
<p>&#160;</p>
<p>將 28295_AESDemo.zip 解壓縮後三個檔案   ElAES.dcu    ElAES.pas    ElAES.txt    COPY 欲撰寫程式的同一目錄下面 </p>
<p>將(ElAES, Math) USES進程式 </p>
<p>unit hoststatus; </p>
<p>interface </p>
<p>uses       &#160;&#160;&#160; &#8230;&#8230;&#8230;.ElAES, Math; </p>
<p>&#160;</p>
<p>//AES加解密用到的 Function ===========================   function Tform1.StringToHex(S: string): [...]]]></description>
			<content:encoded><![CDATA[<p>這通常是運用在資料庫內有密碼的時候，不希望顯示的是明碼，所以要透過加密解密的動作來實現這個需求，這邊使用的是AES加密功能。</p>
<p>DELPHI 用的 AES 檔案 <a href="http://www.infinity.idv.tw/application/28295_AESDemo.zip" target="_blank">下載</a></p>
<p>此範例程式(D7)已含AES檔案：<a href="http://www.infinity.idv.tw/application/AES加解密測試.rar" target="_blank">下載</a></p>
<p>程式執行：</p>
<p>將字串加密   <br /><a href="http://blog.infinity.idv.tw/blog-img/DELPHIAES_ED18/1.jpg"><img title="1" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="309" alt="1" src="http://blog.infinity.idv.tw/blog-img/DELPHIAES_ED18/1_thumb.jpg" width="782" border="0" /></a> </p>
<p>將字串解密還原   <br /><a href="http://blog.infinity.idv.tw/blog-img/DELPHIAES_ED18/2.jpg"><img title="2" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="302" alt="2" src="http://blog.infinity.idv.tw/blog-img/DELPHIAES_ED18/2_thumb.jpg" width="769" border="0" /></a> </p>
<p>&#160;</p>
<p>將 28295_AESDemo.zip 解壓縮後三個檔案   <br />ElAES.dcu    <br />ElAES.pas    <br />ElAES.txt    <br />COPY 欲撰寫程式的同一目錄下面 </p>
<p>將(ElAES, Math) USES進程式 </p>
<p><font color="#008000"><strong>unit hoststatus; </strong></font></p>
<p><font color="#008000"><strong>interface </strong></font></p>
<p><font color="#008000"><strong>uses       <br />&#160;&#160;&#160; &#8230;&#8230;&#8230;.ElAES, Math;</strong></font> </p>
<p>&#160;</p>
<p>//AES加解密用到的 Function ===========================   <br /><strong><font color="#008000">function Tform1.StringToHex(S: string): string;       <br />var        <br />&#160;&#160;&#160; i: integer; </font></strong></p>
<p><strong><font color="#008000">begin       <br />&#160; Result := 』; </font></strong></p>
<p><strong><font color="#008000">&#160; // Go throught every single characters, and convert them       <br />&#160; // to hexadecimal&#8230;        <br />&#160;&#160;&#160; for i := 1 to Length( S ) do        <br />&#160;&#160;&#160;&#160;&#160; Result := Result + IntToHex( Ord( S[i] ), 2 );        <br />end; </font></strong></p>
<p><strong><font color="#008000">function Tform1.HexToString(S: string): string;       <br />var        <br />&#160;&#160;&#160; i: integer; </font></strong></p>
<p><strong><font color="#008000">begin       <br />&#160; Result := 』; </font></strong></p>
<p><strong><font color="#008000">&#160; // Go throught every single hexadecimal characters, and convert       <br />&#160; // them to ASCII characters&#8230;        <br />&#160; for i := 1 to Length( S ) do        <br />&#160; begin        <br />&#160;&#160;&#160; // Only process chunk of 2 digit Hexadecimal&#8230;        <br />&#160;&#160;&#160;&#160;&#160; if ((i mod 2) = 1) then        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Result := Result + Chr( StrToInt( &#8216;0x&#8217; + Copy( S, i, 2 )));        <br />&#160; end;        <br />end; </font></strong></p>
<p>//AES加密Function   <br /><strong><font color="#008000">function Tform1.Encrypt(Passwd: String): String;       <br />var        <br />&#160; Source: TStringStream;        <br />&#160; Dest: TStringStream;        <br />&#160; Start, Stop: cardinal;        <br />&#160; Size: integer;        <br />&#160; Key: TAESKey128;        <br />&#160; PWD: String;        <br />begin        <br />&#160; //設定加密密碼;        <br />&#160; PWD := &#8216;/.,mnbvcxz&#8217;; </font></strong></p>
<p><strong><font color="#008000">&#160; Source := TStringStream.Create( Passwd );       <br />&#160; Dest&#160;&#160; := TStringStream.Create( 』 ); </font></strong></p>
<p><strong><font color="#008000">&#160; try       <br />&#160;&#160;&#160; // Save data to memory stream&#8230;        <br />&#160;&#160;&#160; Size := Source.Size;        <br />&#160;&#160;&#160; Dest.WriteBuffer( Size, SizeOf(Size) ); </font></strong></p>
<p><strong><font color="#008000">&#160;&#160;&#160; // Prepare key&#8230;       <br />&#160;&#160;&#160; FillChar( Key, SizeOf(Key), 0 );        <br />&#160;&#160;&#160; Move( PChar(PWD)^, Key, Min( SizeOf( Key ), Length( PWD ))); </font></strong></p>
<p><strong><font color="#008000">&#160;&#160;&#160; // Start encryption&#8230;       <br />&#160;&#160;&#160; Start := GetTickCount;        <br />&#160;&#160;&#160; EncryptAESStreamECB( Source, 0, Key, Dest );        <br />&#160;&#160;&#160; Stop := GetTickCount; </font></strong></p>
<p><strong><font color="#008000">&#160;&#160;&#160; // Display encrypted text using hexadecimals&#8230;       <br />&#160;&#160;&#160; Result := StringToHex( Dest.DataString ); </font></strong></p>
<p><strong><font color="#008000">&#160; finally       <br />&#160;&#160;&#160; Source.Free;        <br />&#160;&#160;&#160; Dest.Free;        <br />&#160; end;        <br />end; </font></strong></p>
<p>//AES解密Function   <br /><strong><font color="#008000">function Tform1.Decypt(Passwd: String): String;       <br />var        <br />&#160; Source: TStringStream;        <br />&#160; Dest: TStringStream;        <br />&#160; Start, Stop: cardinal;        <br />&#160; Size: integer;        <br />&#160; Key: TAESKey128;        <br />&#160; EncryptedText: TStrings;        <br />&#160; S: string;        <br />&#160; PWD: String;        <br />begin        <br />&#160; //設定加密密碼;        <br />&#160; PWD := &#8216;/.,mnbvcxz&#8217;; </font></strong></p>
<p><strong><font color="#008000">&#160; // Convert hexadecimal to a strings before decrypting&#8230;       <br />&#160; Source := TStringStream.Create( HexToString( Passwd ));        <br />&#160; Dest&#160;&#160; := TStringStream.Create( 』 ); </font></strong></p>
<p><strong><font color="#008000">&#160; try       <br />&#160;&#160;&#160; // Start decryption&#8230;        <br />&#160;&#160;&#160; Size := Source.Size;        <br />&#160;&#160;&#160; Start := GetTickCount;        <br />&#160;&#160;&#160; Source.ReadBuffer(Size, SizeOf(Size)); </font></strong></p>
<p><strong><font color="#008000">&#160;&#160;&#160; // Prepare key&#8230;       <br />&#160;&#160;&#160; FillChar(Key, SizeOf(Key), 0);        <br />&#160;&#160;&#160; Move(PChar(PWD)^, Key, Min(SizeOf(Key), Length(PWD))); </font></strong></p>
<p><strong><font color="#008000">&#160;&#160;&#160; // Decrypt now&#8230;       <br />&#160;&#160;&#160; DecryptAESStreamECB(Source, Source.Size &#8211; Source.Position, Key, Dest);        <br />&#160;&#160;&#160; Stop := GetTickCount; </font></strong></p>
<p><strong><font color="#008000">&#160;&#160;&#160; // Display unencrypted text&#8230;       <br />&#160;&#160;&#160; Result := Dest.DataString; </font></strong></p>
<p><strong><font color="#008000">&#160; finally       <br />&#160;&#160;&#160; Source.Free;        <br />&#160;&#160;&#160; Dest.Free;        <br />&#160; end;        <br />end;        <br /></font></strong>//AES加解密用到的 Function =========================== </p>
<p><strong><font color="#008000">procedure TForm1.Button1Click(Sender: TObject);       <br />begin        <br />&#160; //showmessage(Encrypt(Edit1.Text));        <br />&#160; Memo1.Text:= Encrypt(Edit1.Text);        <br />&#160; Memo2.Text:=』;        <br />end; </font></strong></p>
<p><strong><font color="#008000">procedure TForm1.Button2Click(Sender: TObject);       <br />begin        <br />&#160; if Trim(Memo1.Text) &lt;&gt; 』 then        <br />&#160; begin        <br />&#160;&#160;&#160; //showmessage(Decypt(Memo1.Text));        <br />&#160;&#160;&#160; Memo2.Text:= Decypt(Memo1.Text);        <br />&#160; end else        <br />&#160;&#160;&#160; MessageDlg(&#8217;沒有已加密資料可供解密!&#8217;, mtError, [mbOk], 0);        <br />end; </font></strong></p>
<p><strong><font color="#008000">procedure TForm1.FormCreate(Sender: TObject);       <br />begin        <br />&#160; Memo1.Enabled := false;        <br />&#160; Memo2.Enabled := false;        <br />end;</font></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.infinity.idv.tw/index.php/2009/10/09/delphi%e4%bd%bf%e7%94%a8aes%e5%8a%a0%e8%a7%a3%e5%af%86%e5%af%86%e7%a2%bc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

