我使用 gpg
加密了一个文件,现在想解密该文件。
是否有方法可以在不导入秘钥文件的情况下解密该文件?
我们有一个名为 key.sec
的文件包含了秘钥;我们能否将该秘钥文件作为参数传递给 gpg
(当我们从 bash
命令行运行 decrypt
命令时)以便解密加密的文件?还是必须先导入秘钥再解密加密的文件?
我使用 gpg
加密了一个文件,现在想解密该文件。
是否有方法可以在不导入秘钥文件的情况下解密该文件?
我们有一个名为 key.sec
的文件包含了秘钥;我们能否将该秘钥文件作为参数传递给 gpg
(当我们从 bash
命令行运行 decrypt
命令时)以便解密加密的文件?还是必须先导入秘钥再解密加密的文件?
您必须将密钥添加到密钥环中。根据gpg(1)
文档的描述:
--no-default-keyring
Do not add the default keyrings to the list of
keyrings. Note that GnuPG will not operate without any
keyrings, so if you use this option and do not provide
alternate keyrings via --keyring or --secret-keyring,
then GnuPG will still use the default public or secret
keyrings.
您可以执行--import --no-default-keyring --secret-keyring temporary
来导入密钥,在解密内容时使用--secret-keyring temporary
,完成后删除~/.gnupg/temporary.gpg
文件。但这只是一个解决办法。
您必须导入密钥才能使用它,但是GnuPG 2.x版本管理秘密密钥的方式已经改变。现在有一个gpg-agent
守护程序来处理秘密密钥访问,从2.1版本开始,它的使用是强制性的。
以下是快速创建临时密钥环以使用包含在文件中的秘密密钥进行解密的方法:
$ mkdir -m 700 ~/.gnupg-temp
$ gpg --homedir .gnupg-temp --import key.sec
$ gpg --homedir .gnupg-temp -d an_ecrypted_file
如果你想进行后续清理,请停止代理并删除该目录:
$ gpg-connect-agent --homedir .gnupg-temp KILLAGENT /bye
$ rm -r ~/.gnupg-temp
曾经有一个选项--secret-keyring
,关于此选项,版本2.1的文档中有如下说明:
此选项已过时且被忽略。所有保密密钥存储在位于GnuPG主目录下的private-keys-v1.d目录中。
private-keys-v1.d
目录(位于--homedir
或~/.gnupg
内)由代理所有和操作。
echo "$(gpg -d $(scp myuser@192.168.1.10:/home/myuser/test-gpg.txt.asc .;ls ./test-gpg.txt.asc))" | ssh myuser@192.168.1.10 'cat > /home/myuser/test-gpg.txt'
rm test-gpg.txt
删除解密文件。