新系统(不能输入空密码)软件版本:

新系统(不能输入空密码)软件版本:

我有一个从较旧的 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效用。

相关内容