我有一个X.509证书和相关的PrivateKey。 我正在尝试使用带有CMSEnvelopedData的java BouncyCastle加密PDF文档。
我可以加密它并返回sucefully加密文件。我可以解密一切。 但是现在我想要更改密钥对,而不是对称密钥,因此也就是加密文档。
为什么我这样做?因为在某些情况下应用程序可以更改某些不对称算法,并且不需要重新加密所有文档,而只需要对称密钥。
我知道我可以通过以下方式获取加密内容:
CMSEnvelopedData encryptedData = new CMSEnvelopedData(new FileInputStream("FILE"));
ContentInfo dataInfo= encryptedData .toASN1Structure();
之后我不确切知道要获取加密的对称密钥需要做些什么。之后,我想解密它,用另一个密钥对加密,然后用相同的加密数据创建另一个CMS,使用相同的对称密钥和新的密钥对。
任何帮助将不胜感激。 感谢。
答案 0 :(得分:0)
过去几年,标准的Java加密库实际上已经赶上了Bouncy Castle IMHO。当Java crypto缺乏时,我在一些项目中使用了BC,但从那时起就使用包含的类实现了整个安全产品。
说了这个(第一个建议 - 使用标准的Java加密 - 很好的例子,公平的文档),我的第二个建议是打破这两个组件(我的道歉但是这里没有Bouncy Castle特定信息,因为我没有&# 39;多年来使用这些特定的图书馆:
使用密钥对称加密明文并分别存储密文BLOB。
使用非对称加密(源私钥和目标公钥),加密密钥并单独存储,引用所使用的密钥对,算法等以及对相关密码的引用-text BLOB / s。
要执行密钥对或其他非对称更新(算法等),请浏览上面#2中的记录,查找(安全地)目标的PKI私钥并解密密钥。然后使用新的一对或其他参数(算法等)非对称地重新加密秘密密钥。覆盖记录#2中的加密密钥。