☆CAPICOMを使った暗号化/復号化
(CAPICOMとは、Crypto APIをCOMにしたものらしいです。)
サンプルではHEXへの変換を行っておられますので、ここでは、暗号化したものをファイルに書き込み、又、ファイルから読み込んで復号化してみました。
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} uses ActiveX, CAPICOM_TLB; // 暗号化 ファイルに書き込む procedure CAPICOM_Encrypt_SaveToFile(FileName: String; Key, S: WideString); var EncryptedData: TEncryptedData; FileStream: TFileStream; Buffer: WideString; begin EncryptedData := TEncryptedData.Create(nil); try EncryptedData.Algorithm.Name := CAPICOM_ENCRYPTION_ALGORITHM_DES; EncryptedData.Algorithm.KeyLength := CAPICOM_ENCRYPTION_KEY_LENGTH_128_BITS; EncryptedData.SetSecret(Key, CAPICOM_SECRET_PASSWORD); EncryptedData.Content := S; Buffer := EncryptedData.Encrypt(CAPICOM_ENCODE_BINARY); FileStream:= TFileStream.Create(FileName, fmCreate or fmShareDenyWrite); try FileStream.WriteBuffer(Pointer(Buffer)^, SysStringByteLen(PWideChar(Buffer))); finally FreeAndNil(FileStream); end; finally FreeAndNil(EncryptedData); end; end; // 復号化 ファイルから読み込む function CAPICOM_Decrypt_LoadFromFile(FileName: String; Key: WideString): WideString; var FileStream: TFileStream; Buffer: WideString; EncryptedData: TEncryptedData; begin Result := ''; EncryptedData := TEncryptedData.Create(nil); try EncryptedData.Algorithm.Name := CAPICOM_ENCRYPTION_ALGORITHM_DES; EncryptedData.Algorithm.KeyLength := CAPICOM_ENCRYPTION_KEY_LENGTH_128_BITS; EncryptedData.SetSecret(Key, CAPICOM_SECRET_PASSWORD); try FileStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); try Pointer(Buffer) := SysAllocStringByteLen(nil, FileStream.Size); FileStream.ReadBuffer(Pointer(Buffer)^, FileStream.Size); EncryptedData.Decrypt(Buffer); Result := EncryptedData.Content; finally FreeAndNil(FileStream); end; except //ShowMessage('error'); Abort; end; finally FreeAndNil(EncryptedData); end; end; // 暗号化 ファイルに書き込む procedure TForm1.Button1Click(Sender: TObject); var FileName: String; begin FileName := ExtractFilePath(Application.ExeName) + 'Angou.dat'; CAPICOM_Encrypt_SaveToFile(FileName, Edit1.Text, Edit2.Text); end; // 復号化 ファイルから読み込む procedure TForm1.Button2Click(Sender: TObject); var FileName: String; begin FileName := ExtractFilePath(Application.ExeName) + 'Angou.dat'; Edit3.Text := CAPICOM_Decrypt_LoadFromFile(FileName, Edit1.text); end; initialization CoInitialize(nil); finalization CoUninitialize; end.
このように高度な暗号化がとても簡単に扱えます。
daily dayflower
Delphi で暗号化するなら CAPICOM を使うと楽
http://d.hatena.ne.jp/dayflower/20071024/1193208297
| 固定リンク