我正在尝试解码我从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()
,我会得到这样的结果:
我真的不知道如何处理这个问题,我尝试了很多不同的方法,但似乎都不起作用,如果有人能给我指出正确的方向,那就太好了!
发布于 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。给它模式,编译它,上传一些你得到的数据作为响应,解码它,看看它是否大致符合你的期望。
https://stackoverflow.com/questions/52537291
复制相似问题