随机损坏的垫块与bouncycastle

时间:2012-08-14 18:12:00

标签: java encryption random bouncycastle pki

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

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

    1. 使用他的私钥解密会话密钥。
    2. 使用会话密钥解密数据。
    3. 现在,平均大约200次中的1次,随机字节将导致数据不可解密:我们在解密结束时得到“pad block corrupted”。相同的字节序列将始终工作或始终导致失败。看起来加密数据的内容没有任何区别(但我仍然在这个领域留下了一些测试)。

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

1 个答案:

答案 0 :(得分:1)

是的,Victor Sorokin是对的。会话密钥中的前导零在传输中被删除。

RSA加密是纯粹的数学函数,它会丢弃任何前导零。当会话密钥被解密时,必须重新填充前导零,以便密钥获得原始长度和值。有填充方案,但必须在双方使用。

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