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

¿Qué tipo de datos usar para el campo de contraseña hash y qué longitud?

Actualización:el simple uso de una función hash no es lo suficientemente fuerte para almacenar contraseñas. Debería leer la respuesta de Gilles en este hilo para una explicación más detallada.

Para las contraseñas, use un algoritmo hash de fortalecimiento de claves como Bcrypt o Argon2i. Por ejemplo, en PHP, use la función password_hash() , que usa Bcrypt por defecto.

$hash = password_hash("rasmuslerdorf", PASSWORD_DEFAULT);

El resultado es una cadena de 60 caracteres similar a la siguiente (pero los dígitos variarán porque genera una sal única).

$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

Utilice el tipo de datos SQL CHAR(60) para almacenar esta codificación de un hash de Bcrypt. Tenga en cuenta que esta función no se codifica como una cadena de dígitos hexadecimales, por lo que no podemos descomprimirla tan fácilmente para almacenarla en binario.

Otras funciones hash todavía tienen usos, pero no para almacenar contraseñas, por lo que mantendré la respuesta original a continuación, escrita en 2008.

Depende del algoritmo hash que utilices. Hashing siempre produce un resultado de la misma longitud, independientemente de la entrada. Es típico representar el resultado hash binario en texto, como una serie de dígitos hexadecimales. O puede usar UNHEX() función para reducir una cadena de dígitos hexadecimales a la mitad.

  • MD5 genera un valor hash de 128 bits. Puede usar CHAR(32) o BINARY(16)
  • SHA-1 genera un valor hash de 160 bits. Puede usar CHAR(40) o BINARY(20)
  • SHA-224 genera un valor hash de 224 bits. Puede usar CHAR(56) o BINARY(28)
  • SHA-256 genera un valor hash de 256 bits. Puede usar CHAR(64) o BINARY(32)
  • SHA-384 genera un valor hash de 384 bits. Puede usar CHAR(96) o BINARY(48)
  • SHA-512 genera un valor hash de 512 bits. Puede usar CHAR(128) o BINARY(64)
  • BCrypt genera un valor hash de 448 bits que depende de la implementación. Usted podría necesitar CHAR(56), CHAR(60), CHAR(76), BINARY(56) o BINARY(60)

A partir de 2015, NIST recomienda usar SHA-256 o más alto para cualquier aplicación de funciones hash que requieran interoperabilidad. Pero NIST no recomienda usar estas funciones hash simples para almacenar contraseñas de forma segura.

Los algoritmos hash menores tienen sus usos (como internos a una aplicación, no para el intercambio), pero son conocido por ser crackeable .