delphi - 将 TurboPower Lockbox 2 转换为 LockBox 3

标签 delphi delphi-xe delphi-6 turbopower lockbox-3

我目前正在将一个项目(使用加密)从 Delphi 6 转换为 XE。该项目使用旧的 Delphi Encryption Compendium,它在 XE 中不起作用。所以我想我应该从该组件集交换到 LockBox。 LockBox 有两个版本 - 2 和 3。我在 Delphi 6 中使用 LockBox2 没有任何问题。我虽然会在 XE 中使用 LockBox3,但我遇到的问题是,与ExFile 演示程序(来自 LockBox2)。

在该演示中,我选择 Blowfish 算法,将密码设置为“testkey”(不带引号),程序将加密文件。

在 Delphi XE 中,我将其拖放到表单上

Codec1: TCodec;
CryptographicLibrary1: TCryptographicLibrary;

并将 Codec1 链接到 CryptographicLibrary1,单击按钮时将执行以下代码(在 LockBox3 网站上找到用于解密字符串的类似代码)....

  codec1.StreamCipherId := BlockCipher_ProgId;
  codec1.BlockCipherId := Blowfish_ProgId;
  codec1.ChainModeId := ECB_ProgId;
  codec1.Password := 'testkey';
  codec1.encryptFile('d:\tools\mingw\bin\md5.exe', 
   'd:\tools\mingw\bin\md5_xe_2.exe');

但最终结果是输出文件的大小与 LockBox2 ExFile 演示的大小不同。

所以我的问题是......

  1. 我在上面的 XE 代码中做错了什么,导致我从 LockBox2 向 ExFile 演示给出了不同的结果?

  2. 我应该在 XE 中使用 LockBox2 吗?

  3. 与2相关,LockBox2(XE版)的代码有人在看吗?

任何帮助将不胜感激。

问候,

最佳答案

  1. 用户“mj2008”一语中的。 Delphi 6 使用 ansisstring 作为字符串。 Delphi XE 使用 UTF-16LE。相同的密码,在屏幕上呈现或从键盘输入时,是完全不同的数据,因此结果自然会不同。

关于预期的文件大小。 Blowfish 是一种 8 字节(64 位) block 模式密码。尽管与其他链接模式不同,ECB 使用 block 填充来填充最后一个 block 。 TPLB3 使用 ECB 的 RFC1321 填充方案,也就是说,它用 1 个 80 美元字节填充消息,后跟足够的零以获得整个 block 大小。 TPLB2 使用不同的方案:它用零填充直到最后一个字节,并将其设置为包 block 中预填充的字节数。

因此,如果您的明文文件大小为 X 字节,并且使用 Blowfish/ECB 加密,则密文大小 Y 应为:

Y = X + 8 - (X mod 8)

(有关更多详细信息,请参阅论坛帖子:http://lockbox.seanbdurkin.id.au/tiki-view_forum_thread.php?comments_parentId=154&topics_offset=2&topics_sort_mode=lastPost_desc&forumId=2)

*2。需要注意的是,我对您的程序的目的和上下文一无所知,而且具体情况可能会影响这个问题,我想说对您的 Delphi XE 程序使用 TurboPower LockBox 3。如果您需要与旧的 LB2 密文进行互操作,请编写并执行一次转换程序,将 LB2 密文转换为 LB3 密文。然后丢弃LB2。

*3。我会继续维护LB2,但只会修复LB2中报告的主要缺陷,不会修复LB2中的RSA组件。

关于delphi - 将 TurboPower Lockbox 2 转换为 LockBox 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7493408/

相关文章:

delphi - Delphi XE 中的类型转换问题

python - 在 Delphi XE 中从网站的 API 获取并显示 json 数据

multithreading - 获取单例类实例多线程

delphi - 在运行时创建 ActiveX 组件会导致访问冲突

delphi - 显示默认右键菜单-Delphi

delphi - 在 Delphi 2010 中,尽管相应按钮被禁用,但仍处理 Click 事件

delphi - Firemonkey 替代 VCL ShortCut() 函数

delphi - FastReport 自动换行到下一行

delphi - 通过提供凭据以编程方式登录

delphi - 如何阻止 Delphi 6 COM 服务器应用程序在启动时重新注册 COM