1

有没有办法可以将我的 Lockbox 2 密文转换为 LockBox 3 密文。我们正在将基于 Delphi 2007 构建的应用程序迁移到 Delphi xe2,我们在 Delphi 2007 中使用了 Lockbox 2 RSA 加密算法,我们打算在 Delphi xe2 中使用 lockbox 3 来支持 Unicode 数据。由于两者生成的密文不同,因为 Xe2 支持 Unicode 数据,我们面临一个问题。因此,我们想以某种方式将 Lockbox 2 生成的密文转换为 LockBox 3。

4

2 回答 2

2

由于根据定义您的密文是无法识别的,因此没有简单的方法来判断底层明文数据是 Ansi 还是 Unicode....所以您可能需要管理一个新的关联属性。

这显然取决于您的应用程序的布局以及这些数据的存储位置以及客户端将如何升级,但可能存在与存储的密文相关的某种新版本标志。如果它在本地表中,请为 PlainTextVersion 添加一个新列并将版本设置为某个值以标记密文是从 Unicode 纯文本中保存的。当读取密文并且这个新字段与Unicdoe标志不匹配时,您可以通过解密和使用Unicode明文加密来升级密文,然后重新保存密文并设置新标志(或简单地推迟密文版本升级,直到明文发生变化并需要更新。)

或者,更好的是,如果可行的话,一次自动升级所有当前的密文。

于 2012-03-23T04:33:33.980 回答
1

要进行转换,最简单的方法是使用 Lockbox 2 解密您的密码文本并使用 Lockbox 3 重新加密它。

原因是据我所知,Lockbox 2 填充了 RSA块类型 2填充的实现,这意味着 Lockbox 2 的 RSA 加密与其他任何人的 RSA 解密都不兼容。

Lockbox 2 的 RSA 加密错误地填充消息如下(通过放置断点并检查 biBlock.Fi.IntBuf.pBuf 的内存来发现):

message-bytes 0x00 random-padding-bytes 0x02 0x00

例如“测试”被填充到:

$01C883AC  74 65 73 74 00 D4 50 50  test..PP 
$01C883B4  A7 BO E5 51 7A 4C C2 BC  ...QzL.. 
$01C883BC  8C B8 69 8A 97 DF AA 1D  ..I..... 
$01C883C4  78 67 1E OE 8B AB 02 00  xg...... 

但它应该被填充到(例如看看这个工作示例):

0x00 0x02 random-padding-bytes 0x00 message-bytes

密码箱 2 不只是反向存储字节(否则消息“测试”也会被反转)或反转 32 位小端(否则 02 00 也会被交换)。只要您使用 Lockbox 2 进行加密和解密,一切正常。

我还注意到另一个错误,其中 Lockbox 2 调用 e.RandomSimplePrime() 来生成公共指数 e 但它会生成一个偶数,即 RandomSimplePrime() 中的一个相当值得注意的错误是吗?我只看了Lockbox 2.07。Lockbox 3 完全重写,因此不会有这些错误。

于 2016-07-28T08:09:22.050 回答