将TurboPower Lockbox 2转换为LockBox 3

时间:2011-09-21 00:44:37

标签: 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)?

  4. 非常感谢任何协助。

    此致

1 个答案:

答案 0 :(得分:3)

  1. 用户“mj2008”击中了头部的钉子。 Delphi 6使用ansistring作为字符串。 Delphi XE使用UTF-16LE。在屏幕上呈现或从键盘输入的相同密码是完全不同的数据,因此结果自然会有所不同。
  2. 关于预期的文件大小。 Blowfish是一种8字节(64位)块模式密码。虽然对于其他链接模式会有所不同,但ECB使用块填充来填充最后一个块。 TPLB3对ECB使用RFC1321填充方案,也就是说它用一个80美元的字节填充消息,然后用足够的零来获得整个块大小。 TPLB2使用不同的方案:它填充零,直到最后一个字节,它设置为包块中预先填充的字节数。

    因此,如果您的纯文本文件是大小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。有一点需要注意,我对程序的目的和背景一无所知,而且具体情况可能影响这个问题,我会说使用TurboPower LockBox 3作为你的Delphi XE程序。如果您需要与旧的LB2密文进行互操作,则执行一次性写入和执行转换程序,将LB2密文转换为LB3密文。然后丢弃LB2。

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