Stocker le hachage sous forme de chaîne hexadécimale dans la base de données fonctionne bien pour moi (les stocker "bruts" dans une String ou un Buffer la propriété ne le fait pas) :
var crypto = require('crypto');
var mongoose = require('mongoose');
var client = mongoose.connect('mongodb://localhost/test');
var UserSchema = new mongoose.Schema({
salt : String,
hash : String
});
var User = mongoose.model('User', UserSchema);
hash('secret', function(err, salt, key) {
new User({ salt : salt, hash : key.toString('hex') }).save(function(err, doc) {
User.findById(doc._id, function(err, doc) {
hash('secret', doc.salt, function(err, key) {
console.log('eq', doc.hash === key.toString('hex'));
});
});
});
});
(au fait, les deux crypto.pbkdf2 et crypto.randomBytes avoir des homologues synchrones)