如何使用OpenPGP.js从分离式签名中获取公钥ID或指纹
实现方案
你可以直接从解析得到的Signature对象中提取所需的公钥ID/指纹,不需要额外向用户索要公钥信息,符合RFC 4880规范的PGP签名默认会携带对应标识数据。
完整代码示例:
import * as openpgp from "openpgp"; const detachedSignature = "-----BEGIN PGP SIGNATURE----- insert signature here -----END PGP SIGNATURE-----"; openpgp.readSignature({ armoredSignature: detachedSignature, }).then(async (sig: openpgp.Signature) => { // 1. 提取公钥ID(兼容所有PGP签名版本) const signingKeyID = sig.getSigningKeyIDs()[0].toHex(); // 2. 提取完整公钥指纹(仅v4及以上版本签名支持) const signaturePacket = sig.packets[0] as openpgp.packet.Signature; const signingKeyFingerprint = signaturePacket.issuerFingerprint?.toHex(); // 用提取到的标识查询你的公钥数据库即可 const signingPublicKey = await queryYourKeyDB(signingKeyID || signingKeyFingerprint); });
说明:
- 调用
getSigningKeyIDs()方法可直接获取签名对应的公钥ID列表,单签名场景下取第一个元素即可,转换为16进制字符串后即可用于公钥查询,该方法兼容所有版本的PGP签名。 - 如果需要更长的公钥指纹做精确匹配,可以直接读取签名包的
issuerFingerprint属性,注意v3版本PGP签名不携带该字段,这种场景下直接用公钥ID查询即可。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

