我的计算机中有一个 GPG 密钥,其 ID 是“[电子邮件保护]“。
我正在使用该--encrypt
命令加密一个虚拟文本文件,并将我自己添加为收件人,但我的 ID 上有一个拼写错误:
$ echo "Hello World" > foo
$ gpg --recipient [email protected] --encrypt foo
现在,如果我尝试使用 解密gpg -d foo.gpg
,则会显示通常的密码屏幕,显示。如果我输入的密码正确,则文件可以正常解密。Juan Cruz Viotti <[email protected]>
这让我很困惑,因为我指定的收件人有拼写错误。gpg
我的 ID 是否被添加为隐式收件人?
答案1
GPG 匹配您输入的收件人的第一部分:
[email protected] # was typed in
[email protected] # ID that was matched
只缺少最后一个字母。它甚至应该只输入 j 就可以工作,因为它会匹配您拥有的唯一键(类似于终端中的“制表符完成”)。
尝试执行您的命令,不仅省略最后一个字母,而且将其更改为电子邮件中的错误字母;它不应该匹配。
原因是指定用户 ID 的默认模式是子字符串匹配,因此您输入的部分电子邮件与用户 ID 的完整电子邮件相匹配。在GPG 的手册页:
By substring match.
This is the default mode but applications may
want to explicitly indicate this by putting the
asterisk in front. Match is not case sensi‐
tive.
Heine
*Heine
以下是略有不同的精简版本GnuPG网站:
如何指定用户 ID
向 GnuPG 指定用户 ID 有不同的方法;以下是一些示例:
- ::用于定位默认主目录。
- 这里密钥 ID 采用通常的简短形式给出。
- 234AABBCC34567C4, 0F323456784E56EAB, 01AB3FED1347A5612, 0x234AABBCC34567C4 :: 此处给出的是 OpenPGP 使用的长格式密钥 ID。
- 1234343434343434C434343434343434, 123434343434343C3434343434343734349A3434, 0E1234343434343434343434EAB3484343434343434, 0xE1234343434343434343434EAB3484343434343434 :: 指定密钥 ID 的最佳方法是使用密钥的指纹。这样可以避免在密钥 ID 重复的情况下产生任何歧义(对于长密钥 ID 来说,这种情况非常罕见)。
- 使用精确匹配字符串。等号表示这一点。
- 使用必须完全匹配的电子邮件地址部分。左尖括号表示此电子邮件地址模式。
- 所有单词必须完全匹配(不区分大小写),但可以在用户 ID 中以任何顺序出现。单词是字母、数字、下划线和所有设置了位 7 的字符的任意序列。
- 使用本地 ID。这是一种非常低级的方法,只有真正需要它的应用程序才应该使用它。井号表示此方法。应用程序不应假设这只是一个数字。
- 按不区分大小写的子字符串匹配。这是默认模式,但应用程序可能希望通过在前面放置星号来明确指示这一点。
并且任何gpg
命令都遵守详细标志(-v
),您可以添加多个标志以获得更“详细”/更多信息,我认为 10 是最大值,因此尝试添加-vvvvvvvvvv