delphi 密钥在加密箱加密/解密中似乎被忽略

axkjgtzd  于 2023-05-06  发布在  其他
关注(0)|答案(1)|浏览(230)

我开始使用 Delphi 的TurboPower Lockbox。不幸的是,我找不到任何文档,所以我使用基本功能来尝试并找出Lockbox的工作原理。在下面的例子中,我有一个按钮用于将明文加密为密文,还有一个按钮用于将密文解密回明文。这似乎可以工作,但请注意,我使用了不同的加密和解密密钥。(生成的密文也总是相同的,无论密钥/密码是什么。
所以很明显,我要么使用了错误的SetKey方法,要么我错过了一个步骤。

procedure TMainForm.BtnEncryptClick(Sender: TObject);
begin
  with TLbRijndael.Create(nil) do
  try
    SetKey('Key1');
    EdtEncrypted.Text := EncryptString(EdtPlainText.Text);
  finally
    Free;
  end;
end;

procedure TMainForm.BtnDecryptClick(Sender: TObject);
begin
  with TLbRijndael.Create(nil) do
  try
    SetKey('Key2');
    EdtDecrypted.Text := DecryptString(EdtEncrypted.Text);
  finally
    Free;
  end;
end;

这段代码中有什么错误/遗漏?

编辑

Lockbox文档链接的额外积分:-)

snz8szmq

snz8szmq1#

您使用的是非常旧版本的Lockbox(Lockbox 2)。您可以在Turbo Power Lockbox Files上找到该版本的文档
您的代码的问题在于您从未设置过KeySize,并且默认情况下KeySize长度(以字节为单位)为0(由于TLbRijndael构造函数和析构函数中出现了bug)。在这种情况下,您的键匹配,因为您传递给SetKey()的内容实际上被忽略了。使用调试器并跟踪到SetKey()方法会显示move()语句移动的是零字节。
但是....除非确保传递给
SetKey()的值长度为 key-sized bytes,否则不应直接调用SetKey()
。相反,您应该调用**GenerateKey()**方法,该方法将接受一个字符串并生成适当大小的密钥。

procedure TMainForm.BtnEncryptClick(Sender: TObject);
begin
  with TLbRijndael.Create(nil) do
  try
    KeySize := ks128;
    GenerateKey('Key1');
    EdtEncrypted.Text := EncryptString(EdtPlainText.Text);
  finally
    Free;
    end;
end;

相关问题