0

谢谢您的帮助。

使用以下示例脚本,我可以成功解码(a) covid VACCINATION条形码并将 json 传递给我的应用程序(我已经在我的“绿色通行证”应用程序中使用条形码对此进行了测试,并且可行)。

但是,当我从我们的地方当局扫描(b) TEST 条形码(即反基因测试、PCR 测试……)并将字符串传递给脚本时,相同的脚本返回“ValueError:无效的 base45 字符串”。

在比较 (a) 疫苗接种 base45 代码和 (b) 测试 base45 代码时,在我未经训练的眼睛看来,两者都是合法的,但显然需要对 (b) 进行其他操作以使其成为有效的 base45?

出于安全原因,我无法粘贴我的真实数据(敏感信息),所以也许你可以帮我弄清楚为什么 (b) 不是 base45而没有看到整个字符串。因此,您可以帮助我的唯一方法是,如果您使用条形码扫描仪扫描您自己的 (a) 和 (b),然后运行您通过我的脚本获得的两个字符串,或者您可能知道任何公开可用的测试数据我们可以合作。非常感谢,伙计们!!!

import json
import sys
import zlib
import base45
import cbor2
from cose.messages import CoseMessage

# payload = SEE COMMENTS
print("decoding payload: "+ payload)
 
# decode Base45 (remove HC1: prefix)
decoded = base45.b45decode(payload)
 
# decompress using zlib
decompressed = zlib.decompress(decoded)

# decode COSE message (no signature verification done)
cose = CoseMessage.decode(decompressed)

# decode the CBOR encoded payload and print as json
print(json.dumps(cbor2.loads(cose.payload), indent=2))

4

1 回答 1

2

每组数据都有一个前缀,您应该在处理之前删除。请查看详细说明编码过程的规范。

前缀通常是HC1并且代表健康证书版本1。它也可能是, , ... 所以请确保您将来了解每个版本。HC2HC3HC200

在您的代码示例中,我可以阅读注释# decode Base45 (remove HC1: prefix),但是该前缀根本没有被decoded = base45.b45decode(payload)

你应该有类似payload = payload[4:] 这篇博文中所示的东西

于 2021-12-22T07:45:54.390 回答