有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用BouncyCastle轻量级API的java OpenPGP加密

我必须使用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


共 (1) 个答案

  1. # 1 楼答案

    您的问题主要归结为使用AES-256和切换到CBC操作模式两部分。我无法帮助您在Bouncy Castle中使用AES-256,但可以提供有关操作模式的说明

    不能将CBC与OpenPGP一起使用。OpenPGP规范只允许special variant of CFB。如果你需要CBC,你必须选择另一个加密系统;如果将OpenPGP消息放在一起更重要,请坚持使用OpenPGP CFB模式。如果您在CBC模式下创建OpenPGP消息,则它们不符合OpenPGP的标准,其他OpenPGP实现(如PGP、“普通”BouncyCastle和GnuPG)将无法读取消息