使用GnuPG解密文件时如何指定私钥?


22

我正在尝试使用GnuPG解密文件,但是在使用以下命令时:

gpg --decrypt filename.gpg

我收到以下消息:

gpg: encrypted with RSA key, ID 3662FD5E
gpg: decryption failed: No secret key

我已经具有用于加密文件的私钥,但是不确定如何指定它。解密以指向此密钥时,我可以包括任何选项吗?


1
什么gpg --list-secret-keys 0x3662FD5E打印?
乔纳斯·谢弗(JonasSchäfer)2015年

不,不是。有什么办法可以添加吗?

您是如何获得私钥的?
乔纳斯·谢弗

此ID实际代表什么?
Nishant '18年

Answers:


17

我已经具有用于加密文件的私钥,但是不确定如何指定它。

我将其理解为“我有一个包含私钥的文件,但不知道如何告诉GnuPG使用它”。

GnuPG要求将密钥(公用密钥和专用密钥)存储在GnuPG密钥环中。这就像

gpg --import [keyfile]

之后,您应该能够完全按照已经尝试的方式解密文件。


5
那么gpg足够聪明,一旦导入多个密钥,就知道要解密哪个密钥?
RollRoll

是。通常,密钥甚至会在加密文件中引用,如果没有,GnuPG会尝试所有密钥。
詹斯·埃拉特

我以编程方式使用GnuPG,并且具有包含数百个私钥的密钥环,并且可能会使用数十个私钥对消息进行加密。仅尝试全部尝试似乎有点浪费(实际上,它尝试使用给定的密码短语将它们全部解锁并采用第一个有效的密码)。
jlh

2
只有发送方隐藏了密钥,GnuPG才会尝试全部尝试。感觉您的用例不是GnuPG的设计目标之一。如果您知道正确的私钥,尽管它没有存储在加密文件中,请考虑使用一个私钥来管理不同的GnuPG主目录/密钥。
詹斯·埃拉特

是的,看来我的用例不太适合gpg。为了完整起见,这里有一个更详细的观察结果:我的收件人ID没有隐藏(不使用-R),因此gpg知道应该尝试使用十几个键中的哪个,而不必尝试整个键环。但是gpg不知道我为哪个密钥提供了密码,因此它必须尝试使用​​这十几个密钥,这会大大降低速度。
jlh

6
bash-4.2$ gpg --import b_secret.key
gpg: key 23E7859B: already in secret keyring
gpg: Total number processed: 1
gpg:       secret keys read: 1
gpg:  secret keys unchanged: 1
bash-4.2$ gpg --decrypt b_txt.asc
gpg: key 23E7859B: secret key without public key - skipped
gpg: encrypted with RSA key, ID 04702E37
gpg: decryption failed: secret key not available

3
欢迎使用SuperUser,您的建议已经在另一个答案中。您应该赞成该答案,而不要提出新答案。您还没有足够的声誉来做到这一点,请等到这样做。
VlastimilOvčáčík2015年

2

您无需在gpg crypto命令中明确声明密钥。如果要解密的主机的密钥环上同时存在密钥对(公钥私钥)(如Jens状态),则GPG会自动确定解密所需的私钥并提出密码挑战。

但是,如果您想尝试所有(非缓存的)密钥(也许您正在测试使用多个密钥加密的文件),则使用该开关--try-all-secrets将循环浏览密钥环上的所有秘密密钥,依次尝试使用它们。即:

gpg -d --try-all-secrets test-gpg.txt.asc

特伦斯

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.