如何解密使用 GPG 对称加密的文件?

如何解密使用 GPG 对称加密的文件?

我使用 GPG 创建并对称加密了一个文件:

touch test.txt && echo 'test' >> test.txt
gpg --output test.txt --symmetric test.txt

但现在我不知道如何解密它,而且令人惊讶的是,我在网上找不到示例。这是我尝试过的:

$ gpg --decrypt test.txt
gpg: AES encrypted data
gpg: encrypted with 1 passphrase
$ gpg --symmetric --decrypt test.txt
gpg: conflicting commands
$ gpg --passphrase --decrypt test.txt
gpg: no valid OpenPGP data found.
gpg: decrypt_message failed: Unknown system error
$ gpg --decrypt --output test_decrypted.txt test.txt
gpg: no valid OpenPGP data found.
gpg: decrypt_message failed: Unknown system error

我究竟做错了什么?

答案1

正确的命令是

gpg --decrypt test.txt

gpg在读取其输入之前会覆盖其输出,因此您test.txt的原始内容会丢失。

您需要加密到不同的文件:

gpg --output test.gpg --symmetric test.txt

答案2

的使用--symmetric似乎令人困惑的不对称:

  • 您必须用于--symmetric加密,但随后
  • 用于--decrypt解密。

此外,您将结果输出到不同的文件中。

一个完整的可重现示例(使用批处理模式,不提示任何内容):

#!/bin/bash

echo "Some important content" > a.txt
[ -f a.txt.gpg ] && rm a.txt.gpg
[ -f b.txt ] && rm b.txt

echo "secret" | gpg --batch --passphrase-fd 0 --output a.txt.gpg --symmetric a.txt
echo "secret" | gpg --batch --passphrase-fd 0 --output b.txt --decrypt a.txt.gpg

echo "------------------------- a.txt"
cat a.txt

echo "------------------------- b.txt"
cat b.txt

diff a.txt b.txt && echo "Files have the same content"


相关内容