2012-03-15 14 views
14

Non riesco a trovare una password in chiaro e un hash precedente corrispondente utilizzando il metodo checkpw di BCrypt (plaintextpw, previoushash).Come utilizzare jBCrypt per il confronto delle hash delle password?

In un servlet di registro prendo la password immessa, l'hash che utilizza il metodo hashpw (password, genSalt) di BCrypt e la memorizza in un db.

Nel servlet di login prendo quell'hash dal db e uso il checkpw di BCrypt per vedere se corrisponde alla password inserita.

Non corrisponde mai. Funziona bene nella mia app java normale, ma non nella webapp. Nessun altro sta avendo questo problema così ho dato che devo fare è sbagliato:

//RegisterServlet 

String pw_hash = BCrypt.hashpw(request.getParameter("password"), BCrypt.gensalt()); 

String loginInsertString = "insert into login (loname,lopassword,locustomerid)" + 
        " VALUES ('" + username + "','" + pw_hash + "','" + loginInsert +  "');"; 


//LoginServlet 

ResultSet rs = stmt.executeQuery("select lopassword from login where loname = '" + 
        loginName + "';"); 
      while(rs.next()){ 
       dbhash = rs.getString(1); 

      } 
      out.println(dbhash+"<br>"); 

if (BCrypt.checkpw(request.getParameter("password"), dbhash)) { 
       out.println("It matches"); 
      }else{ 
       out.println("It does not match"); 
      } 

L'API bcrypt è molto semplice - here

non sto memorizzare il sale perché con bcrypt si suppone don' devo - quindi cosa sto sbagliando?

+3

SOLVED: il campo del database in cui è stato memorizzato pw_hash era composto da 80 caratteri. 20 più di un hash BCrypt. Ritaglio dell'hash o reimpostazione del campo del database su 60 caratteri elaborati. Spero che questo aiuti qualcun altro. – VNorman

+28

Si prega di creare una risposta da soli e accettarla, per chiudere la domanda, invece di aggiungere "RISOLTO" al suo titolo – Bergi

risposta

9

Il campo del database in cui è stato memorizzato pw_hash era di 80 caratteri. Questo era 20 caratteri in più di un hash BCrypt. Ritaglio dell'hash o reimpostazione del campo del database su 60 caratteri funzionanti.

(pubblicando la risposta data [vedere i commenti sulla domanda] per rimuovere la questione dalla coda senza risposta. User è stato chiesto quasi un anno fa, per fare questo, ma non si è ancora fatto. Credito per questa risposta è loro)

Problemi correlati