Depuis github :
Pour hacher 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
});
D'en haut, comment peut-il y avoir aucune valeur de sel impliquée dans les comparaisons? Qu'est-ce que j'oublie ici?
column_password = hash, column_salt = salt
vscolumn_password = hash_salt
. l'attaquant a toujours les mêmes informations. Le point essentiel est de rendre chaque mot de passe si aléatoire et plus grand qu'il devient peu probable que quelqu'un l'ait précalculé.J'avais aussi la même question que l'affiche originale et il a fallu regarder un peu autour et essayer différentes choses pour comprendre le mécanisme. Comme d'autres l'ont déjà souligné, le sel est concaténé au hachage final. Cela signifie donc plusieurs choses:
Ces deux choses sont généralement codées en dur dans l'implémentation, par exemple la source d'implémentation bcrypt pour bcryptjs définit la longueur du sel comme 16
Donc, pour illustrer le concept de base derrière l'idée si l'on voulait le faire manuellement, cela ressemblerait à celui ci-dessous. Je ne recommande pas d'implémenter ce genre de choses vous-même quand il y a des bibliothèques que vous pouvez obtenir pour le faire.
la source
Parce que j'avais moi-même la même question, je sais exactement à quoi vous pensez.
Vous avez une idée fausse entre "Secret Key" qui est utilisé dans les algorithmes cryptographiques et "Salt" qui est utilisé pour ralentir le processus de cryptage et rendre plus difficile pour les pirates d'utiliser la force brute.
Lorsque vous utilisez le mot de passe simple et le sel pour générer le hachage, ce hachage utilise comme clé secrète le mot de passe lui-même ! Donc, la prochaine fois que vous essaierez de le comparer avec un mot de passe simple, ce mot de passe simple doit être exactement le même que celui que vous avez utilisé pour générer le hachage! C'est pourquoi vous n'avez pas à le stocker ailleurs car il est toujours fourni par l'utilisateur lors des étapes d'enregistrement et de connexion!
la source