¿Por qué se agrega "\ 000" al final de las contraseñas antes de hash con bcrypt?

2

Estoy implementando bcrypt para Java como se encuentra aquí . Antes de que tenga lugar el hash real, la línea 455 de esta implementación toma la contraseña de cadena sin formato y la transforma en una matriz de bytes como tal:

passwordb = (password + (minor >= 'a' ? "
passwordb = (password + (minor >= 'a' ? "%pre%0" : "")).getBytes("UTF-8");
0" : "")).getBytes("UTF-8");

Entonces, cuando minor >= 'a' , como siempre es cierto para esta implementación (¿asumo que es un identificador de versión?), entonces %code%00 se concatena al final de la contraseña antes de su transformación en bytes.

¿Qué propósito proporciona agregar %code% a la contraseña?

    
pregunta Numeron 15.05.2015 - 10:54
fuente

2 respuestas

2

Usted tiene razón @Numeron, el propósito de \ 000 es agregar un nulo al final de la secuencia de contraseña (valor NULL o valor de FIN DE ARCHIVO) ya que el nulo es un carácter ilegal para una contraseña (o cualquier entrada del usuario), se usa aquí para indicar el final de la cadena de 'contraseña' (esto es parte del comportamiento normal de la cadena).

el menor que ves es de char minor = (char)0; unas pocas líneas hacia arriba. esta línea convierte el valor 0 a un char. si la implementación java que está utilizando interpreta el carácter 0 como 'a' se agrega que '\ 000' (valor NULL) al final de la cadena de contraseña, ya que probablemente faltará en esa implementación de java. (como en algunos dispositivos Java Mobile que he escuchado).

    
respondido por el LvB 15.05.2015 - 11:53
fuente
2

Continué mi propia investigación ...

\ es un personaje de escape en java, pero una cosa que no me di cuenta es que puede escapar a más de un personaje. En este caso, se escapa de los tres ceros, lo que agrega un carácter NUL a la cadena.

Esto se convierte en un byte extra al final de la matriz UTF8, con el valor 0 . Presumiblemente, esto lo usa el algoritmo para identificar el final de la contraseña a medida que se corta en pedazos y se reorganiza.

(Esto es suficiente para satisfacerme, pero no aceptaré mi propia respuesta por un tiempo en caso de que alguien pueda proporcionar más / mejor información que esta en su propia respuesta)

    
respondido por el Numeron 15.05.2015 - 11:13
fuente

Lea otras preguntas en las etiquetas