如何在不使用Bouncy Castle更改CMS中的对称密钥和加密内容的情况下更改非对称密钥对

use*_*850 5 java encryption cryptography bouncycastle

我有一个X.509证书和相关的PrivateKey.我正在尝试使用带有CMSEnvelopedData的java BouncyCastle加密PDF文档.

我可以加密它,它返回sucefully加密文件.我可以解密一切.但是现在我想要更改密钥对,而不是对称密钥,因此也就是加密文档.

我为什么要这样做?因为在某些情况下应用程序可以更改某些不对称算法,并且不必重新加密所有文档,而只需要对称密钥.

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

CMSEnvelopedData encryptedData = new CMSEnvelopedData(new FileInputStream("FILE"));
ContentInfo dataInfo= encryptedData .toASN1Structure();
Run Code Online (Sandbox Code Playgroud)

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

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

Dar*_*gue 0

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

话虽如此(第一个建议 - 使用标准 Java 加密 - 很好的例子,公平的文档),我的第二个建议是分解这两个组件(我很抱歉,但这里没有 Bouncy Castle 的具体信息,因为我没有使用过这些组件)具体图书馆(以年为单位):

  1. 使用密钥对明文进行对称加密,并分别存储密文 BLOB。

  2. 使用非对称加密(源私钥和目标公钥),加密秘密密钥并单独存储它,引用所使用的密钥对、算法等以及对关联密文 BLOB/s 的引用。

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