2011-08-05 20 views
39

Estamos utilizando bcrypt para contraseñas y datos que nunca necesitan ser descifrados.node.js: cifrar datos que deben descifrarse?

Qué debería hacer para proteger la información de otros usuarios que sí lo hace. Para este ejemplo digamos que no deseamos que el nombre real de un usuario esté en texto plano en caso de que alguien obtenga el db.

Se trata de datos algo confidenciales, pero también es necesario llamarlos de vez en cuando y se muestran en texto sin formato. ¿Hay una manera simple de hacer esto?

+4

situaciones en las que un atacante puede obtener su base de datos, pero no las claves de cifrado también se está almacenando en el disco son con frecuencia bastante artificial. ¿Estás seguro de que has pensado en esto? –

+24

Internet es tan inteligente y útil. Es genial cuando las personas eligen demostrar su inteligencia insultando su enfoque en lugar de responder a la pregunta o proporcionar una orientación sustantiva. – Secesh

Respuesta

104

se puede utilizar el módulo de crypto:

var crypto = require('crypto'); 
var assert = require('assert'); 

var algorithm = 'aes256'; // or any other algorithm supported by OpenSSL 
var key = 'password'; 
var text = 'I love kittens'; 

var cipher = crypto.createCipher(algorithm, key); 
var encrypted = cipher.update(text, 'utf8', 'hex') + cipher.final('hex'); 
var decipher = crypto.createDecipher(algorithm, key); 
var decrypted = decipher.update(encrypted, 'hex', 'utf8') + decipher.final('utf8'); 

assert.equal(decrypted, text); 
+0

¿Recomendaría agregar un IV a esto para hacerlo más seguro? Si es así, ¿cómo se haría esto con 'crypto'? – Fizzix