我正在尝试解码从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()
,我会得到:
我真的不知道该如何处理,我尝试了很多不同的方法,但是似乎没有任何效果,如果有人能指出我正确的方向,那就太好了!
答案 0 :(得分:0)
看起来ASN.1模式也可以从RFC获得(我想不足为奇)。它在附录C中给出(请参见here)。
使用该代码和ASN.1编译器,您可以生成可以解码响应的源代码。有一些针对C / C ++的免费ASN1编译器,我不了解JavaScript。如果您感觉很勇敢,可以尝试this one,它将为您提供C / C ++源代码,然后您可以将其编译为Web程序集,然后可以从JavaScript调用该程序集。感觉很好,很脏,但这可能会起作用。
从npm那里得到的软件包从其github页面来看似乎有些问题(ASN.1相当复杂)。可能有点破。
要掌握它,您可能想尝试ASN.1 Playground。给它一个架构,进行编译,上传您作为响应获得的一些数据,对其进行解码,看看它是否大致符合您的期望。