如何在 NodeJS 中生成 ECDSA 签名而不需要 PEM 密钥格式?
Posted
技术标签:
【中文标题】如何在 NodeJS 中生成 ECDSA 签名而不需要 PEM 密钥格式?【英文标题】:How to generate an ECDSA sign without need of PEM key format in NodeJS? 【发布时间】:2017-04-21 22:21:27 【问题描述】:我必须生成一个 ECDSA 符号并在之后对其进行解码。
我尝试了两种不同的形式:一个给我一个大小为 135 的标志,而另一个给我一个大小为 70 的标志。第一个是用 pem 密钥(asn1js and bn modules as the answer in this link)生成的,第二个是生成的使用“原始”键(eccrypto
模块),如下所示:
const ecdsa = require('eccrypto');
shaMsg = crypto.createHash('sha256').update(myData).digest();
ecdsa.sign(privateKey, shaMsg).then(function(sig)
console.log("Signature in DER format:", sig, '-------size: ', sig.length);
ecdsa.verify(publicKey(), msg, sig).then(function()
console.log("Signature is OK");
).catch(function()
console.log("Signature is BAD");
);
);
这段代码的输出是:
DER 格式的签名: -------尺寸:70
我需要解码我的符号以进行其他操作。谁能帮我解决这个问题?
【问题讨论】:
“我尝试了两种不同的形式” - 这些“形式”是什么?您能否展示完整和最少的代码以及一些示例输出? 我没有放代码,但我告诉了那些“表单”@Artjom:“...第一个是用 pem 密钥(asn1js 和 bn 模块)生成的,第二个是生成的使用“原始”密钥(eccrypto 模块)...”我会尽快放代码。 更新的问题,@Artjom。 【参考方案1】:由于没有人帮忙,我用另一个模块 (elliptic
) 做了我想做的事:
var EC = require("elliptic").ec;
var ec = new EC("secp256k1");
var shaMsg = crypto.createHash("sha256").update(myData.toString()).digest();
var mySign = ec.sign(shaMsg, privateKey, canonical: true);
我希望这对其他人有帮助。
【讨论】:
以上是关于如何在 NodeJS 中生成 ECDSA 签名而不需要 PEM 密钥格式?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Hyperledger Fabric 中生成的 ECDSA 私钥和公钥进行加密和解密
在 java/scala 中生成 ecdsa 32 字节私钥
将 AWS KMS ECDSA_SHA_256 签名从 DER 编码的 ANS.1 格式转换为 JWT base64url 编码的 R || NodeJS/Javascript 中的 S 格式