使用 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 的使用,稍微麻烦一些。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
3DES(Triple Data Encryption Standard)是一种使用对称密钥的加密算法,它是对DES算法进行三次迭代运算的加强版。在Delphi编程语言中,可以通过使用Delphi的加密库实现3DES的加解密功能。 在Delphi中,可以使用TDCP_3DES类来实现3DES的加解密。首先,需要在Delphi项目中导入相应的加密库单元,比如DCPcrypt或者TurboPack LockBox 3。然后,可以创建一个TDCP_3DES的实例,并设置密钥和加密模式。 下面是一个使用Delphi实现3DES加解密的示例代码: ``` uses DCPcrypt; var Cipher: TDCP_3DES; PlainText, CypherText, DecryptedText: AnsiString; Key: array[0..23] of Byte; // 密钥为24字节 begin // 初始化密钥 FillChar(Key, SizeOf(Key), 0); // 这里使用全0作为密钥,请根据实际需求替换成安全的密钥 // 创建TDCP_3DES实例 Cipher := TDCP_3DES.Create(nil); try // 设置使用的密钥 Cipher.Init(Key, SizeOf(Key) * 8, nil); // 加密数据 PlainText := 'Hello, World!'; // 需要加密的明文数据 SetLength(CypherText, Length(PlainText)); Cipher.Encrypt(Pointer(PlainText)^, Pointer(CypherText)^, Length(PlainText)); // 解密数据 SetLength(DecryptedText, Length(CypherText)); Cipher.Decrypt(Pointer(CypherText)^, Pointer(DecryptedText)^, Length(CypherText)); // 输出结果 Writeln('Cyphered Text: ', CypherText); // 输出加密后的密文数据 Writeln('Decrypted Text: ', DecryptedText); // 输出解密后的明文数据 finally Cipher.Free; end; end. ``` 在上述示例代码中,我们创建了一个TDCP_3DES实例,设置了一个24字节的全0密钥,并对一个简单的字符串进行了加解密操作。在实际使用中,需要根据具体需求生成安全的密钥,以保证数据的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值