Node.js生成用于签名数据的密钥

时间:2019-01-11 12:15:49

标签: node.js cryptography digital-signature

例如,我有一些斑点数据:

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

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

1 个答案:

答案 0 :(得分:0)

一种方法是使用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()函数时,我通过sign.sign生成了公钥和私钥,并生成了签名。请记住使用私钥签名。生成的公钥格式如下:

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

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

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

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

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

此外,当无法使用本地crypto.generateKeyPair时(例如在电子应用中),建议使用上述方法