如何用Java解密GnuPG的AES256加密文件?

时间:2017-03-22 16:39:31

标签: java aes gnupg openpgp

我已经使用以下方法在Linux上加密了一个文本文件:

 gpg --cipher-algo AES256 -c file.txt 

该命令要求输入密码,假设我们在这里输入“123”。

这个文件可以简单地解密:

gpg -d file.txt.gpg

现在我想用Java解密这个文件,但是无法使用密码“123”找到如何做到这一点。具体而言,尚不完全清楚盐和初始载体是什么,以及还需要什么。

1 个答案:

答案 0 :(得分:4)

GnuPG实现了OpenPGP协议,该协议不是Java的本机类直接支持的。 OpenPGP有own file format,但也使用slightly different variant of the CFB mode

不要自己实现所有这些,最好选择Bouncy Castle library。它还提供example how to decrypt a symmetrically encrypted message,归结为解密OutputStream out的相关调用(在链接示例中还提供了一些代码来确定使用的算法参数和压缩):

PGPEncryptedDataGenerator encGen = new PGPEncryptedDataGenerator(
        new JcePGPDataEncryptorBuilder(algorithm).setSecureRandom(
          new SecureRandom()).setProvider("BC"));
encGen.addMethod(
        new JcePBEKeyEncryptionMethodGenerator(passPhrase).setProvider("BC"));
OutputStream encOut = encGen.open(out, compressedData.length);