如何在 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 字节私钥

如何在 PHP 中生成 QuickBlox 身份验证签名?

将 AWS KMS ECDSA_SHA_256 签名从 DER 编码的 ANS.1 格式转换为 JWT base64url 编码的 R || NodeJS/Javascript 中的 S 格式

如何在 Go 中存储 ECDSA 私钥

如何在python中生成文件而不将其保存到磁盘?