Il seguente codice funziona, ma io non sono un crittografo professionista, quindi alcuni commenti qui sarebbero utili.
Ho usato il modulo RSA di ursa, invece di crypto.
Sono preoccupato del fatto che se dati simili fossero crittografati direttamente, senza un passaggio di AES o simili, potrebbe essere banale interromperlo. Commento Siete ...
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);
Dopo alcune ulteriori indagini http://en.wikipedia.org/w/index.php?title=RSA_%28cryptosystem%29§ion=12#Attacks_against_plain_RSA sembra Ursa già fa imbottitura.
Non sono sicuro di come si possano fornire agli utenti le proprie chiavi private in modo sicuro. Sarei meglio se generassero le loro coppie di chiavi localmente e ti dessero le loro chiavi pubbliche. – Bruno
@Bruno sì, nessun problema al riguardo ... il mio obiettivo è capire come creare una coppia di chiavi (privata, pubblica) con Node.js, è possibile? – Dail