首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >解码用ASN.1编码的时间戳(javascript)

解码用ASN.1编码的时间戳(javascript)
EN

Stack Overflow用户
提问于 2018-09-27 20:40:15
回答 1查看 984关注 0票数 1

我正在尝试解码我从HTTP post请求中收到的时间戳,但这是一项非常复杂的任务,我甚至对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(),我会得到这样的结果:

我真的不知道如何处理这个问题,我尝试了很多不同的方法,但似乎都不起作用,如果有人能给我指出正确的方向,那就太好了!

EN

回答 1

Stack Overflow用户

发布于 2018-10-27 04:16:56

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

使用它和ASN.1编译器,您可以生成可以解码响应的源代码。有一些针对C/C++的免费ASN1编译器,我不知道JavaScript的。如果你觉得勇敢,你可以试试this one,它会给你C/C++源代码,然后你可以编译成一个web程序集,然后你可以从JavaScript调用它。这感觉,嗯,很脏,但它可能会起作用。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52537291

复制
相关文章

相似问题

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