如何使用gpg命令行来检查密码是否正确

我试图自动备份与duplicity ,但是当我testing结果,我得到

gpg:公钥解密失败:密码不好

我想检查一下我使用的口令是否是与相应的gpg密钥相关的口令,但是在gpg的命令行选项中我看不到说“不要encryption或解密任何东西,只要确认我正在使用正确的密码。“

这表明,也许我(又一次)误解了Gnu隐私卫士。 (对我嘲笑直到哭泣。

请求gpgvalidation密码是否有意义? 如果是这样,怎么样?

这样做没有内置的方法,但是创build一个不会修改任何内容的testing是很简单的,并且允许您检查您的密码。

你没有指定,所以我会假设你使用的是GnuPG版本低于V2版本,并且在你的命令行解释器上使用Bash。

我将在这里和下面给出命令,我将解释每个部分的作用 – (注意:以下是针对GnuPG系列版本1,见下面的GnuPG系列v2)

echo "1234" | gpg --no-use-agent -o /dev/null --local-user <KEYID> -as - && echo "The correct passphrase was entered for this key"

那么首先,用echo "1234" |将一些文本input到GnuPG – 因为我们不想签署任何东西,这只是一个testing,所以我们将签署一些无用的文本。

接下来,我们告诉gpg不要使用密钥代理和--no-use-agent ; 这在以后很重要,因为根据您的密钥代理,它可能不会在成功时返回“0”,这就是我们想要做的 – validation您的密码成功。

接下来,我们告诉gpg将签名的数据直接放到/dev/null文件中,这意味着我们丢弃它,并且不把结果写到terminal – 注意:如果你没有使用Linux / Unix的一些变体,这个文件可能不存在。 在Windows上,您可能只需通过省略-o /dev/null部分来允许它将已签名的数据写入屏幕。

接下来,我们通过使用--local-user 012345指定我们想要testing的--local-user 012345 。 您可以使用KeyID来获得最大特异性,或者使用用户名,无论哪一个最适合您的需求。

接下来我们指定启用ascii输出模式的-as ,并设置签名的上下文模式。 之后只是告诉GnuPG从标准input中得到要签名的数据,这是我们给echo "1234" |的命令的第一部分。 。

最后,我们还有&& echo "A message that indicates success" – “&&”表示如果前面的命令成功,则打印此消息。 这只是为了清楚而添加的,因为上面的命令的成功否则将根本没有输出。

我希望这已经足够清楚了解你正在做什么,以及如何使用它来做你想做的testing。 如果有任何部分不清楚或不明白,我会很乐意澄清。 祝你好运!

[编辑] – 如果你使用的是GnuPG v2,上面的命令需要稍微修改一下,如下所示:

echo "1234" | gpg2 --batch --passphrase-fd 1 -o /dev/null --local-user <KEYID> -as - && echo "The correct passphrase was entered for this key"

原因是,GnuPG v2期望通过代理来检索密码,所以我们不能禁止代理与--no-use-agent并且具有期望的效果; 相反,我们需要告诉GnuPG v2我们要运行“批处理”过程,并使用选项--passphrase-fd 1从STDIN(标准input)中检索密码。

只需将您的私钥的密码设置为“”(空白)即可。 这将允许您不要在命令行中声明密码参数,而不会获得密码提示。

你的单个文件的命令行应该看起来像这样:

 gpg -d file_to_decrypt.pgp 

或用于多个文件:

 gpg -- batch --decrypt-files *.pgp 

注意:要更改密码,可以通过命令行或使用Kleopatra或GPA(推荐)等GUI来完成。