使用 Java 进行 PGP 加密和解密 [已关闭]

2022-09-01 07:49:24

我想使用 PGP 密钥解密文件。

我已经下载了PGP密钥安装程序并已安装。使用它,我创建了一个文本文件,并使用PGP密钥加密了文本文件。

然后我得到了一个加密的.pgp扩展名文件。现在我想使用PGP使用Java代码解密同一文件。

在Java中,如何解密已经使用PGP密钥加密的文本文件?


答案 1

你可以围绕GNU PGP编写一个简单的包装器,它基本上从Java执行GPG命令。

使用 GNU PGP 的优点是你不会被绑定到一个特定的库。在线为第三方库提供的文档和支持数量不如其他加密方案丰富,因为大多数从命令行调用PGP。PGP密钥也将保留在一个公共位置,即用户特定的密钥环,而不是导出到多个文件中。

用于解密的 GPG 命令是

echo "password" | gpg --passphrase-fd 0 --output plaintext.txt --decrypt encrypted.gpg

通过将密码短语 fd 指定为 0,您可以通过标准输入流提供密码。

以下是Java代码的样子 -

public static void decryptFile(String privKeyPass) {
    String[] cmd = new String[];
    int i = 7;
    cmd[i++] = "gpg";
    cmd[i++] = "--passphrase-fd";
    cmd[i++] = "0";
    cmd[i++] = "--output";
    cmd[i++] = "plaintext.txt";
    cmd[i++] = "--decrypt";
    cmd[i++] = "encrypted.gpg";
    Process process = Runtime.getRuntime().exec(cmd);

    BufferedWriterout = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
    out.write(privKeyPass);
    try {
        out.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
   // Read process.getInputStream()
   // Read process.getErrorStream()
}

答案 2

我已经用Java用BounceCastle API和OpenPGP编写了一个完整的代码。在此源代码中,您将找到如何生成密钥对,加密和解密文件。看一看: https://github.com/damico/OpenPgp-BounceCastle-Example


推荐