Usa questo:https://github.com/ncb000gt/node.bcrypt.js/
bcrypt è uno dei pochi algoritmi focalizzati su questo caso d'uso. Non dovresti mai essere in grado di decrittografare le tue password, ma verifica solo che una password in chiaro immessa dall'utente corrisponda all'hash memorizzato/crittografato.
bcrypt è molto semplice da usare. Ecco uno snippet dal mio schema utente Mongoose (in CoffeeScript). Assicurati di utilizzare le funzioni asincrone poiché bycrypt è lento (apposta).
class User extends SharedUser
defaults: _.extend {domainId: null}, SharedUser::defaults
#Irrelevant bits trimmed...
password: (cleartext, confirm, callback) ->
errorInfo = new errors.InvalidData()
if cleartext != confirm
errorInfo.message = 'please type the same password twice'
errorInfo.errors.confirmPassword = 'must match the password'
return callback errorInfo
message = min4 cleartext
if message
errorInfo.message = message
errorInfo.errors.password = message
return callback errorInfo
self = this
bcrypt.gen_salt 10, (error, salt)->
if error
errorInfo = new errors.InternalError error.message
return callback errorInfo
bcrypt.encrypt cleartext, salt, (error, hash)->
if error
errorInfo = new errors.InternalError error.message
return callback errorInfo
self.attributes.bcryptedPassword = hash
return callback()
verifyPassword: (cleartext, callback) ->
bcrypt.compare cleartext, @attributes.bcryptedPassword, (error, result)->
if error
return callback(new errors.InternalError(error.message))
callback null, result
Inoltre, leggi questo articolo, che dovrebbe convincerti che bcrypt è una buona scelta e aiutarti a evitare di diventare "bene e veramente effed".