将 TurboPower Lockbox 2 转换为 LockBox 3

发布于 2024-12-05 12:19:54 字数 1040 浏览 6 评论 0原文

我目前正在将一个项目(使用加密)从 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版)吗?

任何帮助将不胜感激。

问候,

I am currently in the process of converting a project (that uses encryption) from Delphi 6 to XE. This project uses the old Delphi Encryption Compendium which does not work in XE. So I figured that I would swap from that component set to LockBox. There are two versions of LockBox - 2 and 3. I have no problems with using the LockBox2 in Delphi 6. I though that I would use LockBox3 in XE, but the problem that I have is that I cannot get the same results when used with ExFile demo program (from LockBox2).

In that demo I select the Blowfish algorithm set the password to 'testkey' without the quotes and the program will encrypt the file.

In Delphi XE, I dropped onto the form

Codec1: TCodec;
CryptographicLibrary1: TCryptographicLibrary;

and linked Codec1 to CryptographicLibrary1 and when clicking a button the following code is executed (found similar code on LockBox3 site for decrypting strings)....

  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');

But the end result is that the output file has a different size to that from the LockBox2 ExFile demo.

So my questions are....

  1. What have I done wrong in the XE code above such that I gives a different result to ExFile demo from LockBox2?

  2. Should I just use LockBox2 within XE?

  3. Related to 2, is there someone looking after the code LockBox2 (for XE)?

Any assistance would be greatly appreciated.

Regards,

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

私藏温柔 2024-12-12 12:19:54
  1. 用户“mj2008”一语中的。 Delphi 6 使用 ansisstring 作为字符串。 Delphi XE 使用 UTF-16LE。相同的密码,在屏幕上呈现或从键盘输入时,是完全不同的数据,因此结果自然会不同。

关于预期的文件大小。 Blowfish 是一种 8 字节(64 位)块模式密码。尽管与其他链接模式不同,ECB 使用块填充来填充最后一个块。 TPLB3 使用 ECB 的 RFC1321 填充方案,也就是说,它用 1 个 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。需要注意的是,我对您的程序的目的和上下文一无所知,并且特定情况可能会影响这个问题,我想说对您的 Delphi XE 程序使用 TurboPower LockBox 3。如果您需要与旧的 LB2 密文进行互操作,请编写并执行一次转换程序,将 LB2 密文转换为 LB3 密文。然后丢弃LB2。

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

  1. The user "mj2008" hit the nail on the head. Delphi 6 uses ansistring as string. Delphi XE uses UTF-16LE. The same password, as rendered on a screen or typed in from keyboard, is a completely different datum, so naturally, results will be different.

About expected file sizes. Blowfish is an 8 byte (64 bit) block mode cipher. Although it will be different for other chaining modes, ECB uses block padding to pad out the last block. TPLB3 uses the RFC1321 padding scheme for ECB, which is to say it pads the message out with one $80 byte followed by enough zeroes to get a whole block size. TPLB2 uses a different scheme: It pads with zeroes until the last byte, which it sets to the number of pre-padded bytes in the pack block.

So if your plaintext file is Size X bytes, and if you encrypt with Blowfish/ECB, then the ciphertext size Y, should be:

Y = X + 8 - (X mod 8)

(Refer to forum thread for more detail: http://lockbox.seanbdurkin.id.au/tiki-view_forum_thread.php?comments_parentId=154&topics_offset=2&topics_sort_mode=lastPost_desc&forumId=2)

*2. With the caveat that I know nothing about the purpose and context of your program, and that specific circumstances may impact on this question, I would say use TurboPower LockBox 3 for your Delphi XE program. If you have a need to interoperate with old LB2 ciphertext, then write and execute once-off, a conversion program to convert LB2 ciphertext to LB3 ciphertext. Then discard LB2.

*3. I continue to maintain LB2, but I will only fix reported major defects in LB2, and I will not fix the RSA component in LB2.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文