☆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
| 固定リンク
