Comment node.bcrypt.js comparer hachée et mots de passe en clair sans sel?
De github:
De hachage d'un mot de passe:
var bcrypt = require('bcrypt');
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash("B4c0/\/", salt, function(err, hash) {
//Store hash in your password DB.
});
});
Pour vérifier un mot de passe:
//Load hash from your password DB.
bcrypt.compare("B4c0/\/", hash, function(err, res) {
//res == true
});
bcrypt.compare("not_bacon", hash, function(err, res) {
//res = false
});
À partir de ci-dessus, comment peut-il y avoir plus de sel valeurs impliquées dans les comparaisons? Ce qui me manque ici?
Vous devez vous connecter pour publier un commentaire.
Le sel est incorporé dans la table de hachage (en clair). La fonction de comparaison suffit simplement de tirer le sel de la table de hachage, puis l'utilise pour hacher le mot de passe et effectuer la comparaison.
column_password = hash, column_salt = salt
vscolumn_password = hash_salt
. l'attaquant a encore de la même information. Point de sel est de faire de chaque mot de passe de façon aléatoire et plus grand qu'il devient peu probable que quelqu'un a précalculées il.J'ai eu la même question que l'original de l'affiche, et il a pris un peu de regarder autour et essayer différentes choses pour comprendre le mécanisme. Comme cela a déjà été souligné par d'autres, le sel est concaténé à la finale de hachage. Donc, cela signifie deux choses:
Ces deux choses sont généralement codées en dur dans la mise en œuvre par exemple le bcrypt mise en œuvre de la source pour bcryptjs définit le sel longueur de 16
Afin d'illustrer le concept de base derrière l'idée, si l'on voulait le faire manuellement, Il devrait ressembler à ce qui suit. Je ne recommande pas la mise en œuvre des trucs comme ça toi-même quand il y a des bibliothèques que vous pouvez faire.