EDIT: Ok, así que he encontrado un poco una respuesta aquí BCrypt says long, similar passwords are equivalent - problem with me, the gem, or the field of cryptography?jBCrypt problema grave con checkpw (return true cuando no debería?)
Nueva pregunta, sin embargo, ¿cómo puede alguien recomendar el uso de Bcrypt de hash si tiene limitar la longitud de la contraseña del usuario en un mundo en el que tratamos de educar a los usuarios para elegir contraseñas cada vez más complejas, incluso frase de contraseña, diciendo que su contraseña debe ser más corta que n caracteres parece una manera de terminar en thedailywtf.com capturas de pantalla del viernes :)
pregunta original a continuación:
estoy refactorización una vieja entrada página para una aplicación y decidió dar un vuelco a bCrypt usando la implementación de JAVA jBCrypt (http://www.mindrot.org/projects/jBCrypt/) y se encontró con un stop show importante.
El problema está en el método checkpw que siempre parece ser cierto cuando se usa una semilla muy larga. Iba a saltear la contraseña del usuario con {InternalSalt} {username} {password} y luego hash eso con bCrypt.
Así que tengo el siguiente código (desglosado tanto como sea posible para aislar checkpw).
public class Test {
public static void main(String[] args) {
String plaintext = "jw~ct/f61y1m7q458GiLVQpiqDK|8kG=d368Id:[email protected]$^_80I{qrn1HM6423{FtestAccountO1nu3jKN";
String pw_hash = BCrypt.hashpw(plaintext, BCrypt.gensalt());
if (BCrypt.checkpw("jw~ct/f61y1m7q458GiLVQpiqDK|8kG=d368Id:[email protected]$^_80I{qrn1HM6423{FtestAccountO1nu3jKN", pw_hash))
System.out.println("It matches");
else
System.out.println("It does not match");
}
}
Esto, como debe ser, de impresión "de que coincide".
problema que estoy teniendo es que dice que dice Añadir aaa con la contraseña que pasan a checkpw por lo que es
BCrypt.checkpw ("JW ~ ct/f61y1m7q458GiLVQpiqDK | 8 kg = d368Id: D @ $^_ 80I {qrn1HM6423 {FtestAccountO1nu3jKNaaa ", pw_hash)
¡Sigue siendo cierto! No es exactamente lo que esperaba. No veo ninguna limitación de longitud de la contraseña en el documento, pero no puedo reproducirlo con una contraseña más pequeña, también parece que si modifico algo más que el final de la cadena funciona como se esperaba devolviendo el valor falso.
¿Echo de menos algo importante? Sé que no debo ser el único que use jBcrypt en estos foros, ya que he visto que BCrypt recomendaba en muchas publicaciones mientras hacía una investigación.
EDIT: Windows 7 64 bits - Java (TM) SE Runtime Environment (build 1.6.0_24-b07)