簡體   English   中英

節點JS加密符號返回空字符串

[英]Node js crypto sign returns empty string

我想使用加密用私鑰對字符串簽名。

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生成的密鑰並不那么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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM