sql >> Base de Datos >  >> RDS >> Mysql

¿Qué tipo/longitud de columna debo usar para almacenar una contraseña hash de Bcrypt en una base de datos?

El formato de cripta modular para bcrypt consta de

  • $2$ , $2a$ o $2y$ identificando el algoritmo hash y formato
  • un valor de dos dígitos que indica el parámetro de costo, seguido de $
  • un valor codificado en base 64 de 53 caracteres de longitud (utilizan el alfabeto . , / , 09 , AZ , az que es diferente a la Codificación estándar Base 64 alfabeto) que consta de:
    • 22 caracteres de sal (efectivamente solo 128 bits de los 132 bits decodificados)
    • 31 caracteres de salida encriptada (efectivamente solo 184 bits de los 186 bits decodificados)

Por lo tanto, la longitud total es de 59 o 60 bytes respectivamente.

Como usa el formato 2a, necesitará 60 bytes. Y por lo tanto, para MySQL recomendaré usar el CHAR(60) BINARY o BINARY(60) (ver El _bin y binario Colaciones para obtener información sobre la diferencia).

CHAR no es binario seguro y la igualdad no depende únicamente del valor del byte sino de la intercalación real; en el peor de los casos A se trata como igual a a . Ver El _bin y binary Colaciones para más información.