我使用 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"