java - 如何在 Java 中通过 GnuPG 解密 AES256 加密文件?

标签 java aes gnupg openpgp

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

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

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

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

gpg -d file.txt.gpg

现在我想用 Java 解密这个文件,但不太清楚如何使用密码“123”来解密这个文件。具体来说,尚不完全清楚盐值和初始 vector 是什么,以及还需要什么。

最佳答案

GnuPG 实现了 OpenPGP 协议(protocol),Java 的原生类不直接支持该协议(protocol)。 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);

关于java - 如何在 Java 中通过 GnuPG 解密 AES256 加密文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42957749/

相关文章:

java - 在 Java 中查找大数的阶乘

java - Volley 超时错误...数据插入两次

java - Spring - 使用注释设置属性值而不使用属性文件

java - 使用 AES/CTR 模拟流密码

python-3.x - python gnupg : "No Pinentry" error during key deletion

java - 是否有任何事件可以知道 View 是否移动到其他 View 下方?

java - 在 Android 上围绕现有的 PHP 系统实现 AES 加密/解密

objective-c - 使用任何东西在 Objective-C 中加密/在 Ruby 中解密

c - 将 GPG 与 C 一起使用?

android - 已安装 GnuPG,但来自 gradle 任务的 "command not found"