Node.js – Crie hashes de senha fortes com esta função

O hash de suas senhas de usuário antes de confirmá-las no armazenamento persistente é uma necessidade em qualquer ambiente onde a segurança é importante. O Node.js torna isso fácil de fazer com sua biblioteca de criptografia integrada. Aqui está uma função do node.js que uso para gerar hashes de senha fortes usando a funcionalidade crypto.pbkdf2 do node.js:

// generate a strong password hash (make sure you choose a salt
// or capture the salt randomly generated for you!)
var hashPassword = function (opts, callback) {
// make sure some plaintext is present
// if not make some up and call this method recursively
if (!opts.plaintext) {
return crypto.randomBytes(6, function (err, buf) {
if (err) callback(err);
opts
.plaintext = buf.toString('base64');
return hashPassword(opts, callback);
})
}
// make sure a salt is present in input
// if not make a salt up
if (!opts.salt) {
return crypto.randomBytes(64, function (err, buf) {
if (err) return callback(err);
opts
.salt = buf;
return hashPassword(opts, callback);
})
}
// we use pbkdf2 to hash and iterate 10k times by default
// hashed password is in opts.key in the callback
opts
.hash = 'sha1';
opts
.iterations = opts.iterations || 10000;
return crypto.pbkdf2(opts.plaintext, opts.salt, opts.iterations, 64, function (err, key) {
if (err) return callback(err);
opts
.key = new Buffer(key);
return callback(null, opts);
})
};