我正在解决加密数据传输的问题,大约每 200 次就有 1 次出现“损坏的填充 block ”解密失败。该方案与加密电子邮件非常相似(专为相当大的数据量而设计:每单位最多 1 GB):
- 生成随机 256 字节用作 session key 。
- 使用接收者的公钥加密 session key
- 使用 CBC AES PKCS#7 填充来加密数据,并使用 session key 作为 AES 的关键参数。
接收者将然后
- 使用他的私钥解密 session key 。
- 使用 session key 解密数据。
现在,平均大约 200 次中有 1 次,随机字节将导致数据无法解密:在解密结束时我们会得到“填充 block 损坏”。相同的字节序列要么总是有效,要么总是导致失败。看起来要加密的数据内容没有任何区别(但我在这方面仍然有一些测试)。
关于如何避免失败有什么建议吗?
最佳答案
是的,维克多·索罗金是对的。 session key 中的前导零在传输中被删除。
RSA 加密是一个纯粹的数学函数,它将删除任何前导零。当 session key 被解密时,必须将前导零填充回去,以便 key 恢复其原始长度和值。有可用的填充方案,但必须在两侧都使用它们。
BouncycaSTLe 常见问题解答添加了一些详细信息,请参阅此处的问题 4: http://www.bouncycastle.org/wiki/display/JA1/Frequently+Asked+Questions
关于java - 带有 bouncycaSTLe 的随机损坏的垫 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11958246/