J'utilise actuellement les outils suivants pour chiffrer les mots de passe:
var pass_shasum = crypto.createHash('sha256').update(req.body.password).digest('hex');
Pourriez-vous suggérer des améliorations pour rendre le projet plus sûr?
J'utilise le code suivant pour saler et hacher les mots de passe.
var bcrypt = require('bcrypt');
exports.cryptPassword = function(password, callback) {
bcrypt.genSalt(10, function(err, salt) {
if (err)
return callback(err);
bcrypt.hash(password, salt, function(err, hash) {
return callback(err, hash);
});
});
};
exports.comparePassword = function(plainPass, hashword, callback) {
bcrypt.compare(plainPass, hashword, function(err, isPasswordMatch) {
return err == null ?
callback(null, isPasswordMatch) :
callback(err);
});
};
bcrypt peut également être appelé de manière synchrone. Exemple de Coffeescript:
bcrypt = require('bcrypt')
encryptionUtil =
encryptPassword: (password, salt) ->
salt ?= bcrypt.genSaltSync()
encryptedPassword = bcrypt.hashSync(password, salt)
{salt, encryptedPassword}
comparePassword: (password, salt, encryptedPasswordToCompareTo) ->
{encryptedPassword} = @encryptPassword(password, salt)
encryptedPassword == encryptedPasswordToCompareTo
module.exports = encryptionUtil
Il existe également un module bcrypt-nodejs pour noeud. https://github.com/shaneGirish/bcrypt-nodejs .
Auparavant, j'utilisais déjà le module bcrypt déjà mentionné, mais je tombais dans des problèmes sur win7 x64. D'autre part, bcrypt-nodejs est une implémentation JS pure de bcrypt et n'a aucune dépendance.
Vous pouvez utiliser le package bcrypt-js pour chiffrer le mot de passe.
Pour hacher un mot de passe:
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash("B4c0/\/", salt, function(err, hash) {
// Store hash in your password DB.
});
});
Pour vérifier votre mot de passe,
// Load hash from your password DB.
bcrypt.compare("B4c0/\/", hash, function(err, res) {
// res === true
});
Vous pouvez visiter https://www.npmjs.com/package/bcryptjs pour plus d'informations sur bcryptjs.