2011-09-21 83 views
2

我目前正在将一个项目(使用加密技术)从Delphi 6转换为XE。这个项目使用旧版的Delphi Encryption Compendium,它在XE中不起作用。所以我想我会从该组件设置交换到LockBox。有两个版本的LockBox - 2和3.我在Delphi 6中使用LockBox2没有问题。虽然我会在XE中使用LockBox3,但是我遇到的问题是使用时无法获得相同的结果ExFile演示程序(来自LockBox2)。将TurboPower Lockbox 2转换成LockBox 3

在该演示中,我选择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

您确定LockBox2的结果正确吗?你是否用另一个加密实用程序测试了它,找出哪个库给你错误的结果? LockBox 3有一个支持论坛,这似乎是积极的。你有没有试过在那里问你的问题?这是它的网址:http://lockbox.seanbdurkin.id.au/tiki-view_forum.php?forumId=2 – vcldeveloper

+1

XE使用Unicode,因此也要考虑 - 它会影响字符串处理,这可能会影响大小。 – mj2008

回答

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

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

所以,如果你的明文文件的大小为X个字节,如果你用的Blowfish加密/ ECB,然后将密文的大小Y,应该是:

Y = X + 8 - (X模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组件。