java - 带有 bouncycaSTLe 的随机损坏的垫 block

标签 java encryption random bouncycastle pki

我正在解决加密数据传输的问题,大约每 200 次就有 1 次出现“损坏的填充 block ”解密失败。该方案与加密电子邮件非常相似(专为相当大的数据量而设计:每单位最多 1 GB):

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

接收者将然后

  1. 使用他的私钥解密 session key 。
  2. 使用 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/

相关文章:

java - 刷新页面浏览器服务代码一会儿

java - apache spark 中类(任务对象)的 kryo 序列化在反序列化时返回 null

c# - 我应该在 AesGcm 中使用迭代吗?

c++ - 我可以从 C++ 中的数组中随机选择一个元素吗?

java - 我应该如何在Java中引用 "grandparent"类的函数/void?

java - SPARQL 类型转换?

.net - 使用 protected 配置对web.config进行加密毫无意义吗?

java - 从字节生成公钥时出现无效 key 规范异常

C++ 随机数检查非常小的概率

javascript - 我想单击一个按钮并在我的容器中的随机位置出现一个随机图像