You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 04:36:00