2010-02-23 27 views
9

Estoy creando contraseñas hash utilizando shal salado en PHP.Almacenamiento de contraseñas hash en MySQL

Mi pregunta es: En MySQL, ¿cuál es la codificación de caracteres adecuada, tipo de campo & longitud para almacenar el resultado?

¿Hay algo más en MySQL que considerar para la seguridad de las contraseñas? ¿Finalmente son opciones prácticas de hash SHA256 o SHA512?

Respuesta

5

Para un hash SHA1, CHAR (40) sería el tipo y longitud de campo óptimos. La codificación de caracteres no debería importar mucho, todos los caracteres están dentro del rango ASCII. Me gustaría ir con el mismo conjunto de caracteres que el resto de su base de datos para la coherencia.

12

Los algoritmos SHA-2 (SHA-256, SHA-512) son opciones válidas; sin embargo, requieren más almacenamiento. Para almacenar los dígitos hexadecimales para SHA-256, por ejemplo, necesita un campo CHAR (64). Ha habido algunas preguntas sobre si SHA-1 está "roto" Schneier discussed it y NIST commented. Si ésos le conciernen, entonces sería mejor utilizar una de las funciones de SHA-2.

Y si desea aumentar el costo de un ataque de fuerza bruta, también podría considerar agregar algunas iteraciones usando un algoritmo como PBKDF2. Alguien publicó un ejemplo here in the comments.

+0

"Para almacenar los dígitos hexadecimales para SHA-256, por ejemplo, necesita un campo CHAR (64)". ¿Puede explicar esto? Gracias. – JDelage

+2

@JDelage: solo me refería a la cantidad de dígitos hexadecimales necesarios para almacenarlo. La salida es de 256 bits => 32 bytes => 64 dígitos hexadecimales. Si el almacenamiento fuera un problema, podría almacenarse en algún tipo de campo de tipo raw/binary en 32 bytes. –

Cuestiones relacionadas