有没有办法通过 CLI 工具或某种 API 从 PGP 公钥块中提取 PGP 密钥 ID?
我在二进制文件中找到了键的十六进制值,但我猜位置是基于键的种类/大小。
基本上,我有 base64 格式的公钥,我想从中检索密钥 ID,而不用 GnuPG 导入它。
有没有办法通过 CLI 工具或某种 API 从 PGP 公钥块中提取 PGP 密钥 ID?
我在二进制文件中找到了键的十六进制值,但我猜位置是基于键的种类/大小。
基本上,我有 base64 格式的公钥,我想从中检索密钥 ID,而不用 GnuPG 导入它。
您可以使用gpg --dry-run
来防止更改。
以下行将在其输出中打印密钥 ID(可以使用常用的修饰符进行修改,例如--with-colons
进一步处理)。A4FF2279
是这里的关键 ID。
$ gpg --dry-run --import pubkey.asc
gpg: key A4FF2279: public key "[User ID not found]" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
gpg: no ultimately trusted keys found
刚试了一下,钥匙没有存储到我的钥匙串中,但是打印了钥匙ID。但要小心--dry-run
,手册页有一个警告:
--dry-run Don't make any changes (this is not completely implemented).
在Stack Overflow 问题How to display gpg key details without importing it?. 他们都将提供密钥 ID。
关于 OpenPGP 消息格式的RFC 4880讨论了如何从公钥计算密钥 ID。
第 12.2 节的摘录:
对于 V3 密钥,八位字节的密钥 ID 由 RSA 密钥的公共模数的低 64 位组成。
对于 V4 键:
V4 指纹是八位字节 0x99 的 160 位 SHA-1 哈希,后跟两个八位字节的数据包长度,然后是从版本字段开始的整个公钥数据包。Key ID 是指纹的低 64 位。
您可以轻松解析 base64 编码公钥的最后 64 位,即对应公钥的密钥 ID。
从 gpg 手册(gpg (GnuPG) 2.2.11):
--显示键
此命令将 OpenPGP 密钥作为输入,并以与命令 --list-keys 对本地存储密钥相同的方式打印有关它们的信息。此外,还启用了列表选项 show-unusable-uids、show-unusable-subkeys、show-notations 和 show-policy-urls。与通常的自动处理一样,此命令应与选项--with-colons 结合使用。
例如:
$ gpg --show-keys docker-ce.gpg
pub rsa4096 2017-02-22 [SCEA]
9DC858229FC7DD38854AE2D88D81803C0EBFCD88
uid Docker Release (CE deb) <docker@docker.com>
sub rsa4096 2017-02-22 [S]
9DC858229FC7DD38854AE2D88D81803C0EBFCD88
密钥ID在哪里。
gpg --with-fingerprint GPG-KEY-filename-that-you-downloaded-from-internet
例如 :
wget https://artifacts.elastic.co/GPG-KEY-elasticsearch
gpg --with-fingerprint GPG-KEY-elasticsearch