delphi 使用 LockBox 做加密解密


本文整理自网络,侵删。

 
Delphi 提供的加密解密控件中,LockBox 是一套非常优秀的开源控件。其前身是 TruboPower LockBox 是一套商业控件。
LockBox 到 Version 2 的时候决定开源。因此有 LockBox2,和之前的商业控件完全一样。
后来,有人另外写了一套,叫做 LockBox3,这个版本同样开源,但代码完全不一样,用法也不一样。其采用的开源协议也不一样。
关于 LockBox2 和 LockBox3 的区别,以及为什么要另外搞一套,请看这里:http://lockbox.seanbdurkin.id.au/HomePage
下载请看这里:

LockBox2: 
https://github.com/TurboPack/LockBox/

LockBox3:
https://github.com/TurboPack/LockBox3

我尝试下载 LockBox2 和 LockBox3 的 ZIP,解压缩后,安装到 Delphi 10.2 东京版。发现有一个问题:同时安装 VCL 版和 FMX 版,结果安装完后,控件面板上没看见。重启 Delphi 后,启动时说某某包加载不成功,等等。
只好卸载 FMX 版,只留 VCL 版,才能成功在 IDE 的控件面版上看到控件。写个例子程序,拖控件过来,写点测试代码,通过。
以下是拖控件过来后的测试代码:

procedure TForm2.Button1Click(Sender: TObject);  
var  
  S: string;  
begin  
  //这是 LockBox 2.0 控件的用法。LockBox3 完全不同了。  
  //这里是拖控件过来的。  
  Lb3DES1.GenerateKey('abcd1234');  
  S := Lb3DES1.EncryptString(Edit1.Text);  
  Memo1.Lines.Add(S);  
  Memo1.Lines.Add('');  
  
  S := Lb3DES1.DecryptString(S);  
  Memo1.Lines.Add(S);  
end;  
  
procedure TForm2.Button2Click(Sender: TObject);  
var  
  EncryptDataStr: string;  
  DecodedStr: string;  
begin  
  //以下是 LockBox3 的用法。Codec1 是拖控件过来的。  
  Codec1.PassWord := 'abc3455';  
  Codec1.EncryptString(Edit1.Text, EncryptDataStr, TEncoding.UTF8);  
  Memo1.Lines.Add(EncryptDataStr);  
  
  Codec1.DecryptString(DecodedStr, EncryptDataStr, TEncoding.UTF8);  
  
  Memo1.Lines.Add(DecodedStr);  
  
  Memo1.Lines.Add('');  
end;  


如果不拖控件,也可以自己用代码在运行期创建对象然后使用,以下是李维用 LockBox3 写的例子代码,加密:

procedure TForm3.Button1Click(Sender: TObject);  
var  
 Codec1: TCodec;  
 CryptographicLibrary1: TCryptographicLibrary;  
 sEncryptData : String;  
begin  
  Codec1 := TCodec.Create( nil);  
  CryptographicLibrary1 := TCryptographicLibrary.Create( nil);  
  try  
    Codec1.CryptoLibrary  := CryptographicLibrary1;  
    Codec1.StreamCipherId := uTPLb_Constants.BlockCipher_ProgId;  
    Codec1.BlockCipherId  := 'native.AES-256';  
    Codec1.ChainModeId    := uTPLb_Constants.CBC_ProgId;  
    Codec1.Password := 'This is a test for AES';  
    Codec1.EncryptString(Edit1.Text, sEncryptData, TEncoding.UTF8);  
    Edit2.Text := sEncryptData;  
  finally  
    Codec1.Free;  
    CryptographicLibrary1.Free;  
  end;  
end;  

以下是解密:

procedure TForm3.Button2Click(Sender: TObject  
var  
 Codec1: TCodec;  
 CryptographicLibrary1: TCryptographicLibrary;  
 sData : String;  
begin  
  Codec1 := TCodec.Create( nil);  
  CryptographicLibrary1 := TCryptographicLibrary.Create( nil);  
  try  
    Codec1.CryptoLibrary  := CryptographicLibrary1;  
    Codec1.StreamCipherId := uTPLb_Constants.BlockCipher_ProgId;  
    Codec1.BlockCipherId  := 'native.AES-256';  
    Codec1.ChainModeId    := uTPLb_Constants.CBC_ProgId;  
    Codec1.Password := 'This is a test for AES';  
    Codec1.DecryptString(sData, Edit2.Text, TEncoding.UTF8);  
    Edit3.Text := sData;  
  finally  
    Codec1.Free;  
    CryptographicLibrary1.Free;  
  end;  
end;  


看起来,LockBox3 的使用,比 LockBox2 的使用,稍微麻烦一些。

相关阅读 >>

Delphi 字符串加单引号

Delphi winapi: getforegroundwindow - 获取前台窗口的句柄

Delphi 获取所有窗口标题

Delphi win32_networkadapter 网卡 参数说明

Delphi编程防止界面卡死的方法

Delphi 截屏函数(包含截取鼠标形状)

Delphi 检查声卡是否安装

截取程序的网络封包(Delphi hook api)

Delphi中动态加载treeview信息

Delphi 动态生成进度条窗体

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...