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.
