如何以易读的方式显示CBOR Web令牌编码的令牌



我正在努力使电晕疫苗接种的二维码内容清晰可见。找到以下页面。我只是不太明白如何读取扫描的字符串。

链接/认证API

字符串:HC1:6BFOXN*TS0BI$ZD4N9:9S6RCVN5+O30K3/XIV0W23NTDEPWK G2EP4J0B3KLASMUG8GJL8LLG.3SA3/-2E%5VR5VVBJZILDBZ8D%JTQOL2009UVD0HX2JN*4CY009TX/9F/GZ%5U1MC82*%95HC2FCG2K80H-1GW$5IKKQJO0OPN484SI4UUIMI.J9WVHWVH+ZE/T9MX1HRIWQHCR2HL9EIAESHOP6OH6MN9*QHAO96Y2/*13A5-8E6V59I9BZK6:IR/S09T./0LWTHC0/P6HRTO$9KZ56DE/.QC$QUC0:GOODPUHLO$GAHLW 70SO:GOV636*2. KOKGKZGJMI:TU+MMPZ5OV1 V125VE-4RZ4E%5MK9BM57KPGX7K:7D-M1MO0Q2AQE:CA7ED6LF90I3DA+:E3OGJMSGX8+KL1FD*Y49+574MYKOE1MJ-69KKRB4AC8.C8HKK9NTYV4E1MZ3K1:HF.5E1MRB4WKP/HLIJL8JF8JF172M*8OEB2%7OREF:FO:7-WF11SKCU1MH8FWPVH%L635OBXTY*LPM6B9OBYSH:4Q1BQ:A5+I6:DQR9VKR8 BLHCFQMZA5:PHR14%GV4ZOP50$ A 3

显然,这个字符串是由CBOR Web令牌编码的。有人知道我如何用Java或PHP解码吗?

  1. base45_decode((
  2. zlib_decode((
  3. CBOR_decode((到headers1、headers2、CBOR_data、签名
  4. CBOR_decode((CBOR_data到greenpassdata
  5. JSON字符串将greenpassdata转换为greenpass_JSON

添加到david的答案中,如果您还想验证签名,请根据其kid(即base64中的headers2[4](查找签名证书,并调用

require("cose-js").sign.verify(
<result from step 2>,
<public key of signing certificate>
)

(这是Node.js,但可能有Java或PHP等价物(。

使用base45解码器:

composer require mhauri/base45

您可以解码字符串:

$base45 = new MhauriBase45();
$decoded = $base45->decode(preg_replace("/^[^:]+:/", "", $encoded));

请注意,我们忽略了前几个字符HC1:,它们是健康证书版本(1(,不是base45编码字符串的一部分。现在您有一个zLib压缩字符串。

然后,您可以使用内置的zilb_decode()方法来解压缩字符串:

$decompressed = zlib_decode($decoded);

现在我们有了实际的CBOR Web令牌字符串。下一步是将该字符串解析为一个数组。问题是,我只找到了两个开源的PHP CBOR包,它们都不适合该任务。

2tvenom/cborencode软件包还不支持标记。spomky-labs/cbor-php似乎根本不理解字符串,尽管它是一个如此复杂的包,也许我做错了什么。

我相信一定有办法,只是我还没有找到。目前,我正在使用https://ehealth.vyncke.org/index.php了解更多关于CBOR的信息。如果你想办法,请分享!

最新更新