2014-01-10 37 views
0

我想使用加密签名带私钥的字符串。节点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 ? 
}); 

公钥和私钥生成的很好。

任何帮助将不胜感激。

+0

的问题是,DH!= RSA –

回答

0

这是密码错误,证实这里:

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); 
1

sign(...)所需的密钥是PEM编码的RSA密钥,但createDiffieHellman生成的密钥并不像我所知的那样。我认为你最好的选择是用OpenSSL生成一个PEM密钥。

+0

虽然这两个系统依赖于模幂,DH密钥对不一样的RSA私钥。如果他们能够工作,他们将会有非常严重的安全问题。 lib(无)返回的错误类型有点担心 - 但有些问题。带有动态输入的IMHO脚本语言不太适合安全相关的应用程序。 –

+0

@loganfsmyth你知道我会如何去做这与node.js加密?只是我应该使用哪些方法的一些指针。谢谢。 – bluelightzero

+0

@bluelightzero RSA密钥对生成似乎不包含在NodeJS中。原因可能是需要很长时间才能使用NodeJS创建RSA密钥对 - RSA密钥对gen是非常慢的。随机数字的产生也可能是一个问题。 –