我目前正在将一个项目(使用加密)从Delphi 6转换到XE。这个项目使用旧的Delphi加密概要,它在XE中不起作用。所以我想我应该从这个组件交换到LockBox。有两个版本的LockBox -2和3。我在Delphi 6中使用LockBox2没有问题。我想我会在XE中使用LockBox3,但我的问题是,当使用ExFile演示程序(来自LockBox2)时,我无法获得相同的结果。
在这个演示中,我选择了Blowfish算法,将密码设置为'testkey‘,没有引号,程序将对文件进行加密。
在Delphi中,我浏览了表单
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?
如能提供任何协助,将不胜感激。
致以敬意,
发布于 2011-09-24 06:35:08
关于预期的文件大小。Blowfish是一个8字节(64位)块模式密码。尽管其他链接模式不同,但欧洲央行使用块填充来填充最后一个模块。TPLB3为欧洲央行使用了RFC1321填充方案,也就是说,它用一个80美元的字节加上足够的零以获得整个块大小。TPLB2使用了一种不同的方案:它用零来填充,直到最后一个字节,然后将其设置为pack块中预先添加的字节数。
因此,如果您的明文文件大小为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程序。如果您需要与旧的LB2密文进行互操作,那么编写并执行一次关闭,这是一个将LB2密文转换为LB3密文的转换程序。然后丢弃LB2。
*3.我继续维护LB2,但我只会修复LB2中报告的主要缺陷,并且不会修复LB2中的RSA组件。
https://stackoverflow.com/questions/7493408
复制相似问题