Nodejs 生成一个密钥来签署一段数据

Nodejs Generate a keys to sign a piece of data

我有一些 blob 数据,例如:

const buffer = Buffer.from('ACDFF12BA','hex');

如何生成密钥以便对其进行签名?

一种方法是使用 keypair npm 包:

const keypair = require('keypair');
const crypto = require('crypto');

const pair = keypair();

// Create Transmitted Signature
const sign = crypto.createSign('RSA-SHA256');
sign.update('abcdef');  // data from your file would go here
const sig = sign.sign(pair.private, 'hex');
console.log(sig);

// Verifying Signature
const verify = crypto.createVerify('RSA-SHA256');
verify.write('abcdef');
verify.end();
console.log(verify.verify(pair.public, sig,'hex'));

如您所见,我使用 keypair() 函数生成了 public 和通过 sign.sign 生成签名的私钥。请记住使用私钥签名。生成的 public 密钥格式如下:

--- RSA BEGIN PUBLIC KEY ---
^some base64 here^
--- RSA END PUBLIC KEY ---

并且生成的私钥将具有相同的格式:

--- RSA BEGIN PRIVATE KEY ---
^some base64 here^
--- RSA END PRIVATE KEY ---

现在唯一要做的就是将缓冲区字符串化为十六进制字符串并完成工作。请记住,接收端也需要将数据验证为十六进制字符串。

我们可以使用 verify.verify 和 public 密钥验证签名。还要记住签名的格式。如果您生成十六进制编码的签名,则以相同的格式验证它。

当原生 crypto.generateKeyPair 不可用时(例如在电子应用程序中)

,也建议使用上述方法