安裝LockBox 3.7.0,用LockBox加密解密!


LockBox  官  方  網  站:http://lockbox.seanbdurkin.id.au/HomePage

LockBox的Github 網址:https://github.com/SeanBDurkin/tplockbox

LockBox 3.7.0  下   載:https://github.com/SeanBDurkin/tplockbox/archive/master.zip

LockBox3.7.0的安裝:

1,解壓縮下載的LockBox3.7.0壓縮包,把壓縮包內所有東西放入你想要放的目錄中,我放到了:“C:\DelphiLib\LockBox3.7.0”中。

2,把“C:\DelphiLib\LockBox3.7.0\run”加入你的Delphi的"library"中。點擊菜單“Tools”->"Options",在隨手彈出的對話框中,選擇左側的“Delphi Options”->"Library",隨后點擊右側“Library path”下面右側的按鈕,隨后加入上面的目錄。注意:這個目錄是我自己存放LockBox3.7.0的地方,你應該換成你自己存放LockBox3.7.0的對應目錄!

3,編譯和安裝LockBox3.7.0。

A,打開你使用的Delphi對應的運行時工程目錄,我使用Delphi XE8,對應的目錄是“C:\DelphiLib\LockBox3.7.0\packages\XE8”,隨后把工程組文件直接拖入Delphi XE8里面。

 

B,鼠標右鍵工程組,隨后點擊右鍵菜單“Build ALL”。

注意:如果這個時候出錯了,查看出錯的關鍵字,我第一次編譯時候出錯了,這個關鍵字不對,隨后我添加上面的路徑到library里面后,再次編譯,發現關鍵字被修改錯誤了,改正成Delphi正確的關鍵字就可以了。下圖我列舉了我當時出現的錯誤狀況,就是關鍵字被篡改了!!

C,安裝LockBox,鼠標右鍵“dclTP_LockBox3_XE8.bpl”,點擊“install”,如果一切順利,你應該安裝上了。

 

到現在,我們就已經成功安裝了LockBox3.7.0了,如果你不去修改先前版本LockBox的代碼,直接使用沒有問題,如果你想修改先前版本LockBox的代碼,一大堆問題,先看看問題,隨后我告訴你如何解決!!

 

錯誤截圖:

解決方法:

1,查看“C:\DelphiLib\LockBox3.7.0\work-products\ephemeral\dcu\XE8\Win32”目錄中DCU文件名稱,發現都是“TPLB3.Codec.dcu”這樣的格式了,和Delphi目前最新的單元名稱是不是一樣?

2,把所有有錯誤的單元文件名修改成“TPLB3.”+原來下划線后面的單元文件名,例如:原單元文件名“uTPLb_Signatory”,修改成“TPLB3.Signatory”,馬上錯誤消失,一直按照這樣方法修改所有錯誤,隨后編譯,完全正確!

加密解密演示例子:

完整例子下載:http://download.csdn.net/detail/sunylat/9728033

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;

type
  TForm2 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    clearLogBtn: TButton;
    logMemo: TMemo;
    Splitter1: TSplitter;
    Panel3: TPanel;
    Button2: TButton;
    Memo1: TMemo;
    Button1: TButton;
    Memo2: TMemo;
    procedure clearLogBtnClick(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }

    // 加密字符串
    procedure EncryptString(keyStr, Plaintext: string; var CipherText: String);

    // 解密字符串
    procedure DecryptString(keyStr: string; var Plaintext: string;
      CipherText: String);

  public
    { Public declarations }
    procedure MyLog(tempLog: string); // log方法
  end;

const
  EncryptKey = 'lockBoxKey'; // 測試用的加密解密key,你可以換成任意你想用的key

var
  Form2: TForm2;

  logInfo: string; // log信息

implementation

{$R *.dfm}

uses
  TPLB3.Signatory, TPLB3.Codec, TPLB3.BaseNonVisualComponent,
  TPLB3.CryptographicLibrary, TPLB3.Constants;

// 加密字符串
procedure TForm2.EncryptString(keyStr, Plaintext: string;
  var CipherText: String);
var
  Codec2: TCodec;
  CryptographicLibrary2: TCryptographicLibrary;
begin
  try
    Codec2 := TCodec.Create(nil);
    CryptographicLibrary2 := TCryptographicLibrary.Create(nil);
    Codec2.CryptoLibrary := CryptographicLibrary2;
    // 這是動態創建對象能夠工作的關鍵
    Codec2.StreamCipherId := TPLB3.Constants.BlockCipher_ProgId;

    Codec2.BlockCipherId := TPLB3.Constants.DES_ProgId;
    Codec2.ChainModeId := TPLB3.Constants.ECB_ProgId;

    // 設置密碼
    Codec2.Password := Trim(keyStr);

    // 加密字符串
    Codec2.EncryptString(Plaintext, CipherText, TEncoding.Default);

  finally
    Codec2.Free;
    CryptographicLibrary2.Free;
  end;
end;

// 解密字符串
procedure TForm2.DecryptString(keyStr: string; var Plaintext: string;
  CipherText: String);
var
  Codec2: TCodec;
  CryptographicLibrary2: TCryptographicLibrary;
begin
  try
    Codec2 := TCodec.Create(nil);
    CryptographicLibrary2 := TCryptographicLibrary.Create(nil);
    Codec2.CryptoLibrary := CryptographicLibrary2;
    // 這是動態創建對象能夠工作的關鍵
    Codec2.StreamCipherId := TPLB3.Constants.BlockCipher_ProgId;

    Codec2.BlockCipherId := TPLB3.Constants.DES_ProgId;
    Codec2.ChainModeId := TPLB3.Constants.ECB_ProgId;

    // 設置密碼
    Codec2.Password := Trim(keyStr);

    // 加密字符串
    Codec2.DecryptString(Plaintext, CipherText, TEncoding.Default);

  finally
    Codec2.Free;
    CryptographicLibrary2.Free;
  end;
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  Plaintext: string; // 未加密信息變量
  CipherText: string; // 加密后信息變量
begin
  if Trim(logMemo.Text) <> '' then
  begin
    // 得到解密內容
    CipherText := Trim(logMemo.Text);

    // 解密
    self.DecryptString(EncryptKey, Plaintext, CipherText);

    // 顯示解密內容
    Memo2.Text := Plaintext;

    if Trim(Memo1.Text) <> '' then
    begin
      if Trim(Memo1.Text) = Trim(Memo2.Text) then
      begin
        showmessage('解密完全正確!!');
      end
      else
      begin
        showmessage('解密結果和加密前的內容不一致!!!');
      end;

    end;

  end
  else
  begin
    showmessage('對不起,要解密內容不能為空!');
  end;

end;

procedure TForm2.Button2Click(Sender: TObject);
var
  Plaintext: string; // 未加密信息變量
  CipherText: string; // 加密后信息變量
begin

  // 要加密信息
  Plaintext := Trim(Memo1.Text);

  if Plaintext = '' then
  begin
    showmessage('對不起,要加密內容不能為空!');
  end
  else
  begin
    // 加密
    self.EncryptString(EncryptKey, Plaintext, CipherText);

    // 顯示加密信息
    logMemo.Text := CipherText;
  end;

end;

procedure TForm2.clearLogBtnClick(Sender: TObject);
begin
  logMemo.Clear;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin

end;

// log方法
procedure TForm2.MyLog(tempLog: string);
var
  temp: string;
  oldLog: string;
begin
  if Trim(tempLog) <> '' then
  begin

    oldLog := Trim(logMemo.Text);
    logMemo.Clear;

    temp := FormatDateTime('yyyy-mm-dd hh:mm:ss', now) + ' ' + Trim(tempLog);
    if oldLog = '' then
    begin
      logMemo.Lines.Add(temp);
      logMemo.Lines.Add('');
    end
    else
    begin
      logMemo.Lines.Add(temp);
      logMemo.Lines.Add('');
      logMemo.Lines.Add(oldLog);
    end;

  end;

end;

end.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM