我有一个从较旧的 gpg 版本开始的 gpg 设置,当时我没有使用密码。当出现提示时,我会直接输入 Enter。我不确定这是否意味着密钥未加密,或者是否使用空密码进行加密。
无论如何,当我尝试解密最近发送给我的内容时,gpg 需要访问我的私钥并提示我输入密码,但现在我不能再使用空密码了。 gpg 失败并显示:
$ gpg -d foo.asc
(X dialog that prompts me for passphrase, I just press enter)
gpg: public key decryption failed: No passphrase given
gpg: decryption failed: No secret key
我希望能够再次使用我的密钥。我不介意从现在开始设置密码,但我不知道如何设置:
$ gpg --passwd [email protected]
(X dialog that prompts me for current passphrase, I just press enter)
gpg: key xxxxxxxxxxxxxxxx/aaaaaaaaaaaaaaaa: error changing passphrase: No passphrase given
gpg: key xxxxxxxxxxxxxxxx/bbbbbbbbbbbbbbbb: error changing passphrase: No passphrase given
gpg: error changing the passphrase for '[email protected]': No passphrase given
我在 openSUSE 15.0 上运行 gpg (GnuPG) 2.2.5 和 libgcrypt 1.8.2。
答案1
我通过使用具有密钥的旧系统解决了这个问题。
- 我在空密码输入有效的旧系统上设置了一个新密码。
- 导出旧系统私钥并将其复制到新系统
- 清理新系统的 gpg 状态(将 .gnupg 移动到 .gnupg.bak)
- 导入非空密码私钥
这是我运行的命令:
# put a non-empty passphrase on current key
me@old$ gpg --passwd [email protected]
(leave empty on first prompt)
(put a new non-empty passphrase on 2nd)
(confirm new passphrase)
# now we export it
me@old$ gpg --list-secret-keys
/home/xxxxx/.gnupg/secring.gpg
-------------------------------
sec 4096R/AAAAAAAA 2015-01-01
uid Foo Bar <[email protected]>
uid Bar Foo <[email protected]>
ssb 4096R/BBBBBBBB 2015-01-01
# I've used the first key id (should be 8 hex digits)
me@old$ gpg --export-secret-keys AAAAAAAA > priv.key
# copy key over new system
# backup .gnupg dir just in case
me@new$ mv .gnupg .gnupg.back
# import new priv key
me@new$ gpg --import priv.key
(type new passphrase set previously)
# done!
为了完整起见,这里是两个系统的软件版本,也许可以帮助某人:
新系统(不能输入空密码)软件版本:
- gpg (GnuPG) 2.2.5
- libgcrypt 1.8.2
- pinentry-curses (pinentry) 1.1.0
旧系统(可输入空密码)软件版本:
- gpg (GnuPG) 2.0.24
- libgcrypt 1.6.1
- pinentry-curses (pinentry) 0.8.3
答案2
这是三种可能的解决方案,请告诉我们是否有一种适合您的情况。
请注意:我没有机会尝试其中任何一个(我没有空密码 gpg 密钥环),但通过手册页/网页进行了研究和搜索!
使用密码-fd
--passphrase-fd
结合使用--batch
允许您通过管道输入空字符串:
echo '' | gpg2 --batch --passphrase-fd 0 your other options
使用克利奥帕特拉
尝试使用克利奥帕特拉,图形证书管理器。
- 选择相关的密钥对
- 右键点击
Change passphrase
- 在弹出窗口中将该字段留空(即使用空密码作为当前密码)
- 在随后的弹出窗口中输入新密码并确认。
使用pinentry
另外,你可以尝试 这个解决方案这利用了pinentry
效用。