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

CBOR编解码缓冲区不一致排查及欧盟绿色通行证QR码解码实现

问题原因
  • 错误1:cbor.decodeAllSync() 方法返回的是所有解码结果组成的数组,你直接将整个数组传入cbor.encode(),编码结果会比原始单条CBOR数据多一层数组包装,自然和原始cbor_data不一致。
  • 错误2:欧盟绿色通行证的CBOR数据采用*确定性CBOR编码规范(RFC 8949)*生成,默认的cbor.encode()没有开启确定性配置,会因为map键排序规则、整数编码长度选择的差异,导致相同语义的数据编码后字节不同。
解决方案

修正代码逻辑,取解码后的单条数据,同时编码时开启确定性配置即可:

// 解码时取数组第一个元素,即原始CBOR对应的单条数据
const greenpassData = cbor.decodeAllSync(cbor_data)[0];

// 编码时传入deterministic参数开启确定性编码
const greenpassDataEncode = cbor.encode(greenpassData, { deterministic: true });

// 此时输出的greenpassDataEncode就会和原始cbor_data完全一致
console.log(greenpassDataEncode);
console.log(cbor_data);
补充说明

如果你的后续逻辑需要用到COSE签名校验,无需重新编码payload,直接使用原始cbor_data参与签名校验即可,避免编码参数差异导致签名校验失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:15:03