我目前正在将项目(使用加密)从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)?
非常感谢任何协助。
此致
答案 0 :(得分:3)
关于预期的文件大小。 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组件。