1

我正在解决加密数据传输的问题,我们在解密时遇到“损坏的垫块”失败大约 200 次。该方案与加密电子邮件非常相似(并且设计用于相当大量的数据:每单位最多 1 GB):

  1. 生成随机 256 字节用作会话密钥。
  2. 使用接收者的公钥加密会话密钥
  3. 使用会话密钥作为 AES 的密钥参数,使用 CBC AES PKCS#7 填充加密数据。

然后接收器将

  1. 使用他的私钥解密会话密钥。
  2. 使用会话密钥解密数据。

现在,平均大约 200 次中的 1 次,随机字节将导致数据不可解密:我们在解密结束时得到“填充块损坏”。相同的字节序列要么总是有效,要么总是导致失败。似乎要加密的数据内容没有任何区别(但我仍然在这方面进行了一些测试)。

关于如何避免失败的任何建议?

4

1 回答 1

1

是的,维克多·索罗金是对的。会话密钥中的前导零在传输中被删除。

RSA 加密是一个纯粹的数学函数,它会丢弃任何前导零。当会话密钥被解密时,必须将前导零填充回去,以便密钥恢复其原始长度和值。有可用的填充方案,但它们必须在两边都使用。

Bouncycastle 常见问题解答添加了一些详细信息,请参阅此处的问题 4:http: //www.bouncycastle.org/wiki/display/JA1/Frequently+Asked+Questions

于 2012-08-15T13:12:19.553 回答