2014-01-10 2 views
0

Я хочу подписать строку с помощью закрытого ключа с использованием криптографии.Node js crypto 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(...), является закодированным ключом RSA , но ключ, созданный createDiffieHellman, не является настолько точным, насколько я знаю. Я думаю, ваш лучший выбор - создать ключ PEM с OpenSSL.

+0

Хотя обе системы основаны на модульном экспоненциации, DH пары ключей не то же самое, как частные ключи RSA. Если они будут работать, у них будут серьезные проблемы с безопасностью. Тип ошибки, возвращаемой lib (none), немного беспокоит, хотя. Языки сценариев IMHO с динамической типизацией не очень хорошо подходят для приложений, связанных с безопасностью. –

+0

@loganfsmyth Знаете ли вы, как я буду делать это с помощью node.js crypto? Просто некоторые указатели на методы, которые я должен использовать. Благодарю. – bluelightzero

+0

@bluelightzero Генерация пары ключей RSA, похоже, не включена в NodeJS. Причина, вероятно, в том, что для создания пар ключей RSA с использованием пары ключей NodeJS - RSA, как известно, очень медленно. Также может возникнуть генерация случайных чисел. –

Смежные вопросы