我目前正在将一个项目(使用加密)从 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 演示的大小不同。
所以我的问题是......
我在上面的 XE 代码中做错了什么,导致我从 LockBox2 向 ExFile 演示给出了不同的结果?
我应该在 XE 中使用 LockBox2 吗?
与2相关,LockBox2(XE版)的代码有人在看吗?
任何帮助将不胜感激。
问候,
最佳答案
- 用户“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/