Use isto:https://github.com/ncb000gt/node.bcrypt.js/
bcrypt é um dos poucos algoritmos focados neste caso de uso. Você nunca deve ser capaz de descriptografar suas senhas, apenas verifique se uma senha de texto simples digitada pelo usuário corresponde ao hash armazenado/criptografado.
bcrypt é muito simples de usar. Aqui está um trecho do meu esquema de usuário Mongoose (em CoffeeScript). Certifique-se de usar as funções assíncronas, pois o bycrypt é lento (de propósito).
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
Além disso, leia este artigo, que deve convencê-lo de que o bcrypt é uma boa escolha e ajudá-lo a evitar ficar "bem e verdadeiramente esgotado".