使用 Java 进行 PGP 加密和解密 [已关闭]
2022-09-01 07:49:24
我想使用 PGP 密钥解密文件。
我已经下载了PGP密钥安装程序并已安装。使用它,我创建了一个文本文件,并使用PGP密钥加密了文本文件。
然后我得到了一个加密的.pgp扩展名文件。现在我想使用PGP使用Java代码解密同一文件。
在Java中,如何解密已经使用PGP密钥加密的文本文件?
我想使用 PGP 密钥解密文件。
我已经下载了PGP密钥安装程序并已安装。使用它,我创建了一个文本文件,并使用PGP密钥加密了文本文件。
然后我得到了一个加密的.pgp扩展名文件。现在我想使用PGP使用Java代码解密同一文件。
在Java中,如何解密已经使用PGP密钥加密的文本文件?
你可以围绕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()
}
我已经用Java用BounceCastle API和OpenPGP编写了一个完整的代码。在此源代码中,您将找到如何生成密钥对,加密和解密文件。看一看: https://github.com/damico/OpenPgp-BounceCastle-Example