☆CAPICOMを使った暗号化/復号化

daily dayflowerさんのところで、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.

Capicom


このように高度な暗号化がとても簡単に扱えます。


daily dayflower
Delphi で暗号化するなら CAPICOM を使うと楽
http://d.hatena.ne.jp/dayflower/20071024/1193208297

|

その他のカテゴリー

ADO | ADT | API | ArrayList | ASP.NET | BDE | BDP.NET | BdpConnection | Borland Developer Studio 2006 | CAPICOM | class | ClipBoard | CodeEditor | Convert.ToString | Custom component | DBExpress | Delphi 2005 | Delphi 2006 | Delphi 2007 | Delphi XE2 | Delphi7 | Delphi8 | Device Driver | Dialog | Docking | DocuWorks | Docuworks SDK | Drag&Drop | Evernote | EXCEL | Firebird | FireMonkey | Game | General | Generics | Google Earth COM API | Google Maps | Google SketchUp | Graphic | IDE | Imm | Indy | InstallAware Express6 | InterBase Admin | JWW | Microsoft SQL Server | MyBase | OnMouseDown | Oracle XE | Paradox | PreviewHandler | PrintDialog | PrintPreviewDialog | PropertyGrid | PSDファイル | Ribbon Controls | RichTextBox | Servers | SubClass | TAction | TActionList | TAnimate | TButton | TCategoryButtons | TClientDataSet | TComboBox | TComboBoxEx | TCustomEdit | TDBGrid | TDockTabSet | TDrawGrid | TEdit | TExcelApplication | TFont | TForm | third party | TImage | TLabel | TList | TListBox | TListView | TMemo | TOpenDialog | TOutlookApplication | TPageControl | TPanel | TRichEdit | TShellResources | TStringGrid | TTabControl | TToolBar | TToolButton | TTreeView | TWebBrowser | Update | VCL Styles | WinInet | XE2 | XPman | オープン配列パラメータ | グループ化 | トランスレーションマネージャー | ファイル処理 | ファイル名処理 | 動的配列 | 投票 | 文字列処理 | 日本語入力 | 暗号 | | 音声合成利用