【发布时间】:2021-06-01 18:45:07
【问题描述】:
我有一个签名,它可以工作,但我想将此签名传递给 websocket,但我需要字符串化以传递对象。但是当我字符串化然后我解析时,结果是不一样的。
let privKey = keyPair.getPrivate("hex");
let msg = JSON.stringify({
go: 'coucou'
});
let msgHash = sha3.keccak256(msg);
let signature =
ec.sign(msgHash, privKey, "hex", { canonical: false });
console.log(signature)
console.log(JSON.stringify(signature))
字符串化前的签名:
Signature {
r: BN {
negative: 0,
words: [
2305509, 63298775,
50157238, 36339965,
49744272, 57791728,
21008130, 692794,
36859051, 3475687
],
length: 10,
red: null
},
s: BN {
negative: 0,
words: [
4203544, 5856462, 11303403, 15905374,
1228528, 49677779, 30950729, 21688839,
46989698, 1764062, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0
],
length: 10,
red: null
},
recoveryParam: 1
}
JSON.stringify() 后的签名:
{"r":"d4239e326cab02a48e9408f02dc753c2f709908aa03f6fd56b6f17735c232de5","s":"6bab7acd018252bc81dd84549bd8174c12bef03cac978ac79eb1657338402418","recoveryParam":1}
JSON.parse() 后的签名:
{
r: 'fc102d49e2b1405afdf61c767a72910241dd87d3fb92b6660f4bd7c08dc9d507',
s: '59570010a6c7b70c5ff2490732e32d1bbe66d2f99504f500cf0897343e32f43b',
recoveryParam: 1
}
所以你可以看到,我没有相同的结果。 肯定有什么让我无法理解
【问题讨论】:
标签: javascript cryptography elliptic-curve ecdsa