2

我正在尝试解码从 HTTP 发布请求中收到的时间戳,但这是一项非常复杂的任务,我什至对 ASN.1/RFC 3161 没有任何适当的了解,所以如果有人愿意帮助我出去,我真的会被激怒!

代码:

import { Action } from 'kawax-js';
import base64 from 'base-64';
var Ber = require('asn1').Ber;

class Timestamp extends Action {

 static type = 'TIMESTAMP';

 call = async (data) => {
  const authEncoded = base64.encode(username+":"+password);
  const formBody = Object.keys(data).map(key => 
  encodeURIComponent(key) + '=' + 
  encodeURIComponent(data[key])).join('&');
  const response = await 
  fetch("https://sign.test.cryptolog.com/tsa/post/", {
   method: 'POST',
   headers: {
    'Accept': 'application/x-www-form-urlencoded',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Authorization': 'Basic ' + authEncoded,
    'Access-Control-Allow-Origin': '*'
   },
   body: formBody
  });
  const bodyData = await response.arrayBuffer();
  var reader = new Ber.Reader(Buffer.from(bodyData));
  if (reader.peek() === Ber.Boolean)
  console.log("",reader.readBoolean());
  return bodyData;
 }
}

export default Timestamp;

我正在尝试使用 asn1 npm 包(https://www.npmjs.com/package/asn1)。

这是我运行代码时得到的响应: 在此处输入图像描述

如果我改变我await response.arrayBuffer()await response.text()我得到这个:

在此处输入图像描述

我真的不知道如何解决这个问题,我尝试了很多不同的东西,但似乎没有任何效果,如果有人能指出我正确的方向,那就太好了!

4

1 回答 1

0

看起来 ASN.1 模式也可以从 RFC 获得(我猜这并不奇怪)。它在附录 C 中给出(见这里)。

使用它和 ASN.1 编译器,您可以生成可以解码响应的源代码。有一些针对 C/C++ 的免费 ASN1 编译器,我不知道 JavaScript 编译器。如果您有勇气,可以试试这个,它会为您提供 C/C++ 源代码,然后您可以将其编译为 Web 程序集,然后您可以从 JavaScript 调用该程序集。这感觉,嗯,很脏,但它可能只是工作。

从它的 github 页面来看,来自 npm 的那个包看起来有一些问题(ASN.1 相当复杂)。它可能只是有点坏了。

要掌握它,您可能想尝试ASN.1 Playground。给它架构,编译它,上传你得到的一些数据作为响应,解码它,看看它是否大致是你所期望的。

于 2018-10-26T20:16:56.180 回答