2008-11-10 10 views
173

bCrypt's javadoc hat diesen Code dafür, wie ein Kennwort zu verschlüsseln:Muss ich das Salz mit bcrypt lagern?

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

Um zu überprüfen, ob ein Text-Kennwort übereinstimmt, die zuvor die checkpw Methode gehasht wurden:

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

impliziert Dieser Code-Schnipsel Für mich ist das zufällig erzeugte Salz weggeworfen. Ist dies der Fall, oder ist das nur ein irreführendes Code-Snippet?

Antwort

201

Das Salz wird in den Hash (in einem base64-Format formatiert) integriert.

Zum Beispiel wurde in traditionellen Unix-Passwörtern das Salz als die ersten beiden Zeichen des Passworts gespeichert. Die verbleibenden Zeichen repräsentierten den Hash-Wert. Die Checker-Funktion weiß das und zieht den Hash auseinander, um das Salz wieder heraus zu bekommen.

+58

Das Salz ist in das Passwort integriert. Sie müssen also das Salz nicht speichern. –

+2

Danke dafür. Ich wünschte, sie hätten das im Javadoc gesagt :) (Ich habe mir die Quelle angeschaut und bestätigt - aber ich wusste nicht, wonach ich vorher gesucht habe) – RodeoClown

+3

Danke - nie erwähnt in den Python-Dokumenten. –