我有 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 的具体信息,因为我没有'多年来一直使用那些特定的库):
使用 key 对明文进行对称加密,密文BLOB单独存储。
使用非对称加密(源私钥和目标公钥),加密 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/