首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从解码缓冲区中编码CBOR

如何从解码缓冲区中编码CBOR
EN

Stack Overflow用户
提问于 2021-09-18 10:08:59
回答 2查看 1.5K关注 0票数 0

当对CBOR进行解码、编码和解码时,缓冲器不返回相同的值。

代码语言:javascript
复制
const greenpassData = cbor.decodeAllSync(cbor_data);

// --------------------------------
//Want the CBOR data after decoding  CBOR Data

const greenpassDataEncode = cbor.encode(greenpassData);

console.log(greenpassDataEncode);
console.log(cbor_data);

完整代码如何解码GreenPass QR代码。简单的绿码译码器受https://git.gir.st/greenpass.git/blob_plain/master:/greenpass.py完全码的启发,如何解码GreenPass QR码。简单的绿码译码器受https://git.gir.st/greenpass.git/blob_plain/master:/greenpass.py完全码的启发,如何解码GreenPass QR码。简单的绿码译码器受https://git.gir.st/greenpass.git/blob_plain/master:/greenpass.py完全码的启发,如何解码GreenPass QR码。受https://git.gir.st/greenpass.git/blob_plain/master:/greenpass.py启发的简单绿通译码器

代码语言:javascript
复制
/**
 * Simple green pass decoder inspired by https://git.gir.st/greenpass.git/blob_plain/master:/greenpass.py
 *
 * 2021 Lorenzo Millucci
 * 
 * Before usage install following dependecies `npm install base45 cbor jpeg-js jsqr pako`
 */

const base45 = require('base45');
const cbor = require('cbor');
const fs = require('fs');
const jpeg = require('jpeg-js');
const jsQR = require("jsqr");
const pako = require('pako');

// Set the path to the green pass QR
const FILE_PATH = __dirname + '/greenpass.jpeg';

// Read image file
const greenpassJpeg = fs.readFileSync(FILE_PATH);
const greenpassImageData = jpeg.decode(greenpassJpeg, { useTArray: true });

// Decode QR
const decodedGreenpass = jsQR(greenpassImageData.data, greenpassImageData.width, greenpassImageData.height);

// Remove `HC1:` from the string
const greenpassBody = decodedGreenpass.data.substr(4);
console.log(greenpassBody)

// Data is Base45 encoded
const decodedData = base45.decode(greenpassBody);

// And zipped
const output = pako.inflate(decodedData);
const results = cbor.decodeAllSync(output);
[headers1, headers2, cbor_data, signature] = results[0].value;

const greenpassData = cbor.decodeAllSync(cbor_data);

// --------------------------------
//Want the cbor data after decoding  cbor Data

const greenpassDataEncode = cbor.encode(greenpassData);

console.log(greenpassDataEncode);
console.log(cbor_data);
// --------------------------------

var josnString = JSON.stringify(greenpassData[0].get(-260).get(1), null, 2);
//new Encoded Array
const ecodeArrayGreenPassData = cbor.encode(greenpassData);
const greenpassData2 = cbor.decodeAllSync(ecodeArrayGreenPassData);
EN

回答 2

Stack Overflow用户

发布于 2021-12-08 21:05:32

也许因为..。

呃..。

让控制台记录Pako创建的内容,如下所示:

代码语言:javascript
复制
 Uint8Array(350) [
  210, 132,  67, 
   ....
   35,  68,  98,  99,
  ... 250 more items
]

..while平原cbor.encode()是从decodeAllSync结果生成的,如下所示:

代码语言:javascript
复制
<Buffer 11 21 31 41 51 61 ... 302 more bytes>

..you遗漏了这一点:

代码语言:javascript
复制
const build = new Uint8Array(cbor.encode(my-decode-result))

玩得开心!

(..but老实说:我也花了一段时间..。然而,回来的其他部分应该更容易。)

票数 0
EN

Stack Overflow用户

发布于 2022-03-25 12:01:36

我的朋友,这是cbor.decodeAllSync()的原型

代码语言:javascript
复制
static decodeAllSync(input: BufferLike, options?: DecoderOptions | string): Array<ExtendedResults> | Array<any>;

它返回一个数组。因此,您要将一个数组传递给cbor.encode(),该数组使用0x81头(因此是额外的字节)进行编码。

您的代码将像预期的那样工作:

代码语言:javascript
复制
const greenpassDataEncode = cbor.encode(greenpassData[0]);

代替:

代码语言:javascript
复制
const greenpassDataEncode = cbor.encode(greenpassData);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69233656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档