java - 如何在不更改对称 key 的情况下更改非对称 key 对以及使用 Bouncy CaSTLe 的 CMS 中的加密内容

标签 java encryption cryptography bouncycastle

我有 X.509 证书和相关的私钥。 我正在尝试使用带有 CMSEnvelopedData 的 java BouncyCaSTLe 加密 PDF 文档。

我可以加密它并返回成功加密的文件。我可以解密和一切。 但现在我想更改 key 对,但不想更改对称 key ,因此更改加密文档。

我为什么要这样做?因为在某些情况下,应用程序可能会更改某些非对称算法,因此无需重新加密所有文档,只需重新加密对称 key 即可。

我知道我可以通过以下方式获取加密内容:

CMSEnvelopedData encryptedData = new CMSEnvelopedData(new FileInputStream("FILE"));
ContentInfo dataInfo= encryptedData .toASN1Structure();

在那之后我不知道我必须做什么才能获得加密的对称 key 。之后,我想解密它,用另一个 key 对加密,然后用相同的加密数据、相同的对称 key 和新的 key 对创建另一个 CMS。

任何帮助将不胜感激。 谢谢。

最佳答案

在过去的几年中,标准的 Java 加密库实际上已经 catch 了 Bouncy CaSTLe 恕我直言。当缺少 Java 加密时,我曾在几个项目中使用过 BC,但从那时起,我仅使用包含的类就实现了整个安全产品。

话虽如此(第一个建议 - 使用标准 Java 加密 - 很好的例子,公平的文档),我的第二个建议是打破这两个组件(我很抱歉,但这里没有 Bouncy CaSTLe 的具体信息,因为我没有'多年来一直使用那些特定的库):

  1. 使用 key 对明文进行对称加密,密文BLOB单独存储。

  2. 使用非对称加密(源私钥和目标公钥),加密 key 并单独存储,引用所使用的 key 对、算法等以及对相关密码的引用-text BLOB/s.

要执行 key 对或其他非对称更新(算法等),请查看上面#2 中的记录,(安全地)查找目标的 PKI 私钥并解密 key 。然后使用新的对或其他参数(算法等)非对称地重新加密 key 。覆盖记录 #2 中的加密 key 。

关于java - 如何在不更改对称 key 的情况下更改非对称 key 对以及使用 Bouncy CaSTLe 的 CMS 中的加密内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17812348/

相关文章:

java - 为所有测试类设置自定义 TestExecutionListener,这样我就可以记录抛出的每个异常/断言的堆栈跟踪

java - 使用 Maven 构建 jar 时如何添加命令行参数

java - 所选项目ListView背景更改

c++ - 如果语句不工作,输入无法识别(C++)

java - GNU 加密货币 : JCE cannot authenticate the provider GNU-CRYPTO

c - 有没有办法用只有 pem 公钥文件或 pem 私钥文件的 RSA 进行加密和解密?

java - 重定向到不同的网址

java - 数据加密算法

c - MS office解密

java - 使用 RSA 私钥加密消息是否安全