2012-03-15 21 views
14

Tengo problemas para obtener una contraseña de texto plano y un hash anterior para que coincida con el método checkpw (plaintextpw, previoushash) de BCrypt.¿Cómo usar jBCrypt para la comparación de contraseñas de contraseña?

En un servlet de registro, tomo la contraseña ingresada, hash usando el método hashpw (contraseña, genSalt) de BCrypt y la almacena en un db.

En el servlet de inicio de sesión, tomo ese hash de la base de datos y uso la comprobación de BCrypt para ver si coincide con la contraseña ingresada.

Nunca coincide. Esto funciona bien en mi aplicación regular de Java, simplemente no en la aplicación web. Nadie más está teniendo este problema por lo que figura debo estar haciendo mal:

//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"); 
      } 

La API Bcrypt es muy simple - here

no estoy almacenar la sal, ya que con Bcrypt que supuestamente don' Tengo que hacerlo, entonces, ¿qué estoy haciendo mal?

+3

SOLUCIONADO - El campo de la base de datos en el que se almacenaba pw_hash era de 80 caracteres ... 20 más que un hash BCrypt. Recortar el hash o restablecer el campo de la base de datos a 60 caracteres trabajados. Espero que esto ayude a alguien más. – VNorman

+28

Cree una respuesta usted mismo y acéptela, para cerrar la pregunta, en lugar de agregar "SOLUCIONADO" a su título – Bergi

Respuesta

9

El campo de la base de datos en el que se almacenaba el pw_hash era de 80 caracteres. Esto fue 20 caracteres más que un hash BCrypt. Recortar el hash o restablecer el campo de la base de datos a 60 caracteres.

(Publicación de la respuesta dada [véanse los comentarios en la pregunta] para eliminar la cuestión de la cola sin respuesta se hizo hace casi un año. Usuario a hacer esto, pero no lo ha hecho todavía. El crédito para esta respuesta es de ellos)

Cuestiones relacionadas