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

OpenPGP.js读取公钥无法获取全部6条notation,出现重复条目

OpenPGP.js读取公钥Notation字段缺失/重复问题解析

问题背景

使用OpenPGP.js(v5.11.2、v6测试版,浏览器和Node.js环境均复现)读取包含6条proof@ariadne.id类型notation的armored格式公钥时,在key[0].users[0].selfCertifications中仅能获取到4条notation,且其中两条内容重复。但通过GPG的showpref命令可正常查看全部6条notation。

可能原因&排查方向

1. OpenPGP.js的解析逻辑特性

OpenPGP.js对notation的处理逻辑和GPG存在差异:

  • 它可能默认合并了内容完全一致的notation条目(包含name和value的大小写、特殊字符等细节),但GPG允许重复条目存在
  • 若部分notation带有critical标记,OpenPGP.js可能跳过了解析这类标记的条目

2. 公钥签名结构问题

公钥的self-certification可能由多个签名块组成:

  • GPG会合并所有self-signature中的notation,但OpenPGP.js可能仅解析了第一个self-signature内的内容,剩余notation可能存在于selfCertifications数组的其他元素中,建议遍历整个数组排查,不要仅查看第一个元素

3. 操作层面的疏漏

  • 检查readKeys调用时是否传入了过滤参数,是否限制了解析字段导致notation被过滤
  • 确认armored公钥未被截断,可通过GPG重新导出一份干净的公钥再进行测试

验证步骤

  1. 用GPG导出二进制格式公钥:gpg --export --output pubkey.bin [你的密钥ID],再用OpenPGP.js读取该二进制密钥,对比结果是否一致
  2. 遍历key[0].users[0].selfCertifications的每一项,逐个查看每个签名内的notation列表
  3. 打印每条notation的完整属性(name、value、critical、humanReadable),确认是否存在被忽略的细节差异

内容的提问来源于stack exchange,提问作者NyaightHazard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:37:07