节点 js 加密符号返回空字符串



我想使用加密密钥对字符串进行签名。

sign方法返回一个空字符串,我希望得到一个符号。

var crypto = require('crypto');
var message = "This is a string I want to ensure is not tampered with.";
var diffieHellman = crypto.createDiffieHellman(1024);
var publicKey = diffieHellman.generateKeys("base64");
var privateKey = diffieHellman.getPrivateKey("base64");
var signer = crypto.createSign('RSA-SHA256');
signer.write(message, "ascii", function()
{
    var signature = signer.sign(privateKey, 'base64');
    console.log(publicKey);
    console.log(privateKey);
    console.log(signature);// Empty string ?
});

公钥和私钥生成正常。

任何帮助将不胜感激。

sign(...)所需的密钥是PEM编码的 RSA 密钥,但据我所知,createDiffieHellman生成的密钥并不是这样。我认为您最好的选择是生成带有 OpenSSL 的 PEM 密钥。

这是加密的错误,在这里确认:

https://github.com/joyent/node/issues/6963

若要解决,请使用位长度 512 和签名者。

这是工作代码

var keypair = require('keypair');
var crypto = require('crypto');
var dataA = "This is a string I do not want to be tampered with";
var dataB = "This is a string I do want to be tampered with";
var pair = keypair({bits:256});
console.log("Private   :"+pair['private']);
console.log(" Public   :"+pair['public']);
var sign = crypto.createSign('RSA-SHA256');
sign.write(dataA);
var signiture = sign.sign(pair['private'],'base64');
console.log("Signiture :"+signiture);

最新更新