El siguiente código funciona, pero no soy un criptógrafo profesional, por lo que algunos comentarios aquí serían útiles.
He usado el módulo ursa RSA, en lugar de crypto.
Me preocupa que si se cifraron datos similares directamente, sin un pase de AES o similar, entonces podría ser trivial para romper esto. Comentarios Por favor ...
var ursa = require('ursa');
var fs = require('fs');
// create a pair of keys (a private key contains both keys...)
var keys = ursa.generatePrivateKey();
console.log('keys:', keys);
// reconstitute the private key from a base64 encoding
var privPem = keys.toPrivatePem('base64');
console.log('privPem:', privPem);
var priv = ursa.createPrivateKey(privPem, '', 'base64');
// make a public key, to be used for encryption
var pubPem = keys.toPublicPem('base64');
console.log('pubPem:', pubPem);
var pub = ursa.createPublicKey(pubPem, 'base64');
// encrypt, with the public key, then decrypt with the private
var data = new Buffer('hello world');
console.log('data:', data);
var enc = pub.encrypt(data);
console.log('enc:', enc);
var unenc = priv.decrypt(enc);
console.log('unenc:', unenc);
Después de una cierta investigación adicional http://en.wikipedia.org/w/index.php?title=RSA_%28cryptosystem%29§ion=12#Attacks_against_plain_RSA parece que ya lo hace la Osa relleno.
No estoy seguro de cómo va a dar a los usuarios sus claves privadas de forma segura. Sería mejor si generaran sus pares de claves localmente y les diera sus claves públicas. – Bruno
@Bruno sí, no hay problema al respecto ... mi objetivo es comprender cómo crear un par de claves (privadas, públicas) con Node.js, ¿es esto posible? – Dail