【发布时间】:2016-10-05 08:01:24
【问题描述】:
我必须使用 256 位 AES-CBC 密钥加密某些内容。要遵循的加密协议是 OpenPGP。由于密钥大小是 256 位,公钥/私钥也将是 4096 位,因此我将不得不使用轻量级 API。我发现了几个问题,展示了如何使用 256 位 AES-CBC 密钥进行加密,但我不知道如何将其与 PGP 集成。
最明显的方法是使用 AES 引擎对其进行加密,然后使用公钥对结果进行加密,就像在 OpenPGP 中所做的那样。但是,这需要我生成初始化向量和 AES 密钥。这些是我希望图书馆做的事情,因为在做这些事情时可能会出错。
这是我用来加密的代码示例:
PGPEncryptedDataGenerator encGen = new PGPEncryptedDataGenerator(new JcePGPDataEncryptorBuilder(PGPEncryptedData.AES_256).setWithIntegrityPacket(true).setSecureRandom(rand).setProvider("BC"));
encGen.addMethod(new JcePublicKeyKeyEncryptionMethodGenerator(<PGPPublic Key object>));
OutputStream encryptedOut = encGen.open(out, new byte[BUFFER_SIZE]);
通过查看 open 函数的代码,我确定输入流首先使用 AES-CFB 进行编码(该库处理我在内部使用初始化向量提到的所有上述问题),然后使用公钥我提供的。如何让它改用 AES-CBC?
【问题讨论】:
-
为什么密钥大小会迫使您使用轻量级 API?
-
据我所知,如果我们需要 256 位的 aes 密钥大小,则需要无限强度管辖策略文件。我的用例不允许这样做,因为它不是便携式解决方案。
-
好的,有道理。无限的力量确实需要摆弄 JRE 目录,但这并不总是可行的。
-
所以问题还是一样。如何使用自定义对称算法构建 PGP 加密文件?
标签: java encryption aes bouncycastle pgp