Devo conservare il sale con bcrypt?


189

javadoc di bCrypt ha questo codice per come crittografare una password:

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

Per verificare se una password in testo semplice corrisponde a una password precedentemente hash, utilizzare il metodo checkpw:

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

Questi frammenti di codice implicano per me che il sale generato casualmente viene gettato via. È questo il caso o è solo uno snippet di codice fuorviante?

Risposte:


214

Il sale è incorporato nell'hash (codificato in un formato in stile base64).

Ad esempio, nelle password Unix tradizionali il salt è stato memorizzato come i primi due caratteri della password. I caratteri rimanenti rappresentavano il valore hash. La funzione checker lo sa e separa l'hash per recuperare il sale.


59
Il sale è incorporato nella password. Quindi non devi salvare il sale.
Swapnonil Mukherjee,

2
Grazie per quello Vorrei che lo dicessero nel javadoc :) (Ho guardato la fonte e confermato - ma non sapevo cosa stavo cercando prima)
RodeoClown

1
Grazie - stavo cercando di capirlo anche io! Ora mi chiedo se questa è una buona idea. Esiste un vantaggio / svantaggio nel mantenere il sale nell'hash rispetto alla sua conservazione separata?
Adam,

8
@Adam: poiché il salt viene generato casualmente, significa che non è necessario disporre di un metodo per associare le due cose nel database.
RodeoClown

Ho dato un'occhiata al codice sorgente e ho scoperto che sebbene JavaDoc per l'argomento salt sia "forse generato usando BCrypt.gensalt", ho scoperto che devi usare il metodo genSalt () o ottieni eccezioni = /
the_new_mr
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.