Poniższy kod działa, ale nie jestem zawodowym kryptografem, więc niektóre komentarze byłyby przydatne.
Użyłem modułu Ursa RSA, zamiast crypto.
Obawiam się, że jeśli podobne dane zostały bezpośrednio zaszyfrowane, bez przechodzenia przez AES lub podobne, może to być trywialne, aby je zepsuć. Komentarze proszę ...
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);
Po pewnym dalszego dochodzenia http://en.wikipedia.org/w/index.php?title=RSA_%28cryptosystem%29§ion=12#Attacks_against_plain_RSA wygląda jak Ursa już robi wyściółkę.
Nie jestem pewien, w jaki sposób zamierzasz bezpiecznie udostępniać użytkownikom swoje prywatne klucze. Byłbym lepszy, gdyby generowali swoje pary kluczy lokalnie i dał ci klucze publiczne. – Bruno
@Bruno tak, nie ma problemu ... moim celem jest zrozumienie, jak utworzyć parę kluczy (prywatnych, publicznych) za pomocą Node.js, czy to możliwe? – Dail