2008-11-10 23 views
173

bCrypt's javadoc a ce code pour savoir comment chiffrer un mot de passe:Ai-je besoin de stocker le sel avec bcrypt?

String pw_hash = BCrypt.hashpw(plain_password, BCrypt.gensalt()); 

Pour vérifier si un mot de passe en texte clair correspond à celui qui a été haché précédemment, utilisez la méthode checkpw:

if (BCrypt.checkpw(candidate_password, stored_hash)) 
    System.out.println("It matches"); 
else 
    System.out.println("It does not match"); 

Ces extraits de code impliquent à moi que le sel généré aléatoirement est jeté. Est-ce le cas, ou est-ce juste un extrait de code trompeur?

Répondre

201

Le sel est incorporé dans le hachage (codé dans un format de type base64). Par exemple, dans les mots de passe Unix traditionnels, le sel était stocké comme les deux premiers caractères du mot de passe. Par exemple, dans les mots de passe Unix traditionnels. Les caractères restants représentaient la valeur de hachage. La fonction checker le sait, et tire le hachage pour récupérer le sel.

+58

Le sel EST incorporé dans le mot de passe. Donc vous n'avez pas à économiser le sel. –

+2

Merci pour cela. Je souhaite qu'ils ont dit que dans le javadoc :) (J'ai regardé la source et confirmé - mais je ne savais pas ce que je cherchais avant) – RodeoClown

+3

Merci - jamais mentionné dans les docs Python non plus. –