5

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

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

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

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

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

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

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

4

1 回答 1

0

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

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

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

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

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

于 2013-09-18T18:18:37.390 回答