tipo para guardar encriptar desencriptar datos dato contraseñas contraseña clave campo mysql hash types passwords cryptography

guardar - tipo de campo para contraseña mysql



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

Como una cadena de longitud fija (VARCHAR (n) o como MySQL lo llama). Un hash siempre tiene una longitud fija de, por ejemplo, 12 caracteres (dependiendo del algoritmo de hash que use). Por lo tanto, una contraseña de 20 caracteres se reduciría a un hash de 12 caracteres, y una contraseña de 4 caracteres también generaría un hash de 12 caracteres.

No estoy seguro de cómo funciona el hash de contraseña (lo implementaré más adelante), pero necesito crear un esquema de base de datos ahora.

Estoy pensando en limitar las contraseñas a 4-20 caracteres, pero según entiendo, después de cifrar la cadena de hash será de diferente longitud.

Entonces, ¿cómo almacenar estas contraseñas en la base de datos?


Debe usar TEXT (que almacena un número ilimitado de caracteres) por razones de compatibilidad hacia adelante. Los algoritmos de hash (necesitan) se vuelven más fuertes con el tiempo y, por lo tanto, este campo de base de datos tendrá que admitir más caracteres con el tiempo. Además, dependiendo de su estrategia de migración, es posible que necesite almacenar hashes nuevos y antiguos en el mismo campo, por lo que no se recomienda fijar la longitud a un tipo de hash.


Los hashes son una secuencia de bits (128 bits, 160 bits, 256 bits, etc., según el algoritmo). Su columna debe ser de tipo binario, no de texto / carácter, si MySQL lo permite (el tipo de datos de SQL Server es binary(n) o varbinary(n) ). También deberías poner sal a los hashes. Las sales pueden ser de texto o binarias, y necesitará una columna correspondiente.


Puede que este artículo de Wikipedia sobre la salazón salt . La idea es agregar un conjunto de datos para aleatorizar el valor de hash; esto protegerá sus contraseñas de ataques de diccionario si alguien obtiene acceso no autorizado a los hashes de contraseña.


Puede usar CHAR (longitud de hash) para definir su tipo de datos para MySQL porque cada algoritmo de hash siempre evaluará el mismo número de caracteres. Por ejemplo, SHA1 siempre devuelve un número hexadecimal de 40 caracteres.


Realmente depende del algoritmo de hash que estés usando. La longitud de la contraseña tiene poco que ver con la longitud del hash, si recuerdo correctamente. Busque las especificaciones en el algoritmo de hash que está utilizando, ejecute algunas pruebas y trunque justo por encima de eso.


Siempre he probado para encontrar la longitud de cadena MAX de una cadena encriptada y la he establecido como la longitud de caracteres de un tipo VARCHAR. Dependiendo de cuántos registros tenga, realmente podría ayudar al tamaño de la base de datos.


para md5 vARCHAR (32) es apropiado. Para aquellos que usan AES mejor usar varbinary.


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

  • MD5 genera un valor hash de 128 bits. Puedes usar CHAR (32) o BINARY (16)
  • SHA-1 genera un valor hash de 160 bits. Puedes usar CHAR (40) o BINARY (20)
  • SHA-224 genera un valor hash de 224 bits. Puedes usar CHAR (56) o BINARY (28)
  • SHA-256 genera un valor hash de 256 bits. Puedes usar CHAR (64) o BINARY (32)
  • SHA-384 genera un valor hash de 384 bits. Puedes usar CHAR (96) o BINARY (48)
  • SHA-512 genera un valor hash de 512 bits. Puedes usar CHAR (128) o BINARY (64)
  • BCrypt genera un valor de hash de 448 bits dependiente de la implementación. Es posible que necesite CHAR (56), CHAR (60), CHAR (76), BINARY (56) o BINARY (60)

NIST recomienda usar SHA-256 o superior para las contraseñas. Los algoritmos de hash menores tienen sus usos, pero se sabe que son craqueables .

Debe salt sus contraseñas antes de aplicar la función de hash. Enviar una contraseña no afecta la longitud del resultado de hash.