如何字符串化椭圆签名 ECDSA
Posted
技术标签:
【中文标题】如何字符串化椭圆签名 ECDSA【英文标题】:how to stringify elliptic signature ECDSA 【发布时间】: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
所以你可以看到,我没有相同的结果。 肯定有什么让我无法理解
【问题讨论】:
【参考方案1】:终于找到解决办法了。
代码是对的,你可以保留解析后的响应,它适用于签名验证,不要忘记在你的验证函数中解析签名。
【讨论】:
以上是关于如何字符串化椭圆签名 ECDSA的主要内容,如果未能解决你的问题,请参考以下文章