MD5 y SHA1 se consideran inseguros, con SHA-1 siendo mejor. Sin embargo, hay 2 cosas que usted debe considerar:
por "inseguridad", que significan para decir que es matemáticamente más fácil que la fuerza bruta para determinar el valor de pre-hash. A veces esto significa que podrían reducir de mil millones de cálculos a 900 millones, otras veces es significativamente menor. Esto no es tan inseguro como mi punto 2.
Dado que está creando un hash, es fácil para un pirata informático determinar las contraseñas de su base de datos completando una tabla llena de contraseñas comunes y ejecutándola con el mismo algoritmo hash, independientemente de cuál use.Esto se llama una tabla de arco iris.
Por ejemplo, muchas personas usan "contraseña" y "john" como contraseñas. En MD5, estas dos contraseñas siempre generan a: contraseña: 5f4dcc3b5aa765d61d8327deb882cf99 John: 527bd5b5d689e2c32ae974c6229ff785
Así que si sólo MD5 sus contraseñas, y alguien tan ingenuo como para hacer que su contraseña, es probable que se vea comprometida si un hacker controla su base de datos y lo ejecutó contra una tabla de arco iris.
Sin embargo, si agrega algún tipo de galimatías a todos los valores prehechizos, como "password12345" y "johnxyz", obtendrá 2 hashes completamente diferentes que no serían los mismos que los de arriba. Esto se llama valor de sal e impide que las tablas de arco iris sean tan efectivas.
Mi recomendación sería utilizar el más alto nivel de los algoritmos SHA que pueda en su lenguaje de programación, y hash contra un valor de sal (puede crear uno "aleatorio" si lo desea) usted almacena en el registro de la base de datos con la contraseña hash.
DB columns: Nombre de usuario | Contraseña | Sal
Este no es el sistema más seguro en el que nadie haya pensado, pero es probable que funcione para el suyo.
Tenga cuidado con las respuestas de "culto a la carga" que afirman que un algoritmo hash está "roto" o "defectuoso" sin indicar para qué propósito el algoritmo es defectuoso. Si almacena hashes de contraseñas SHA-1 simples en una base de datos, su enfoque es tan erróneo como con MD5 (vea http://en.wikipedia.org/wiki/Rainbow_table). Creo que el costo requerido para generar colisiones hash no es muy importante en el caso de uso de almacenamiento seguro de las contraseñas de los usuarios en una base de datos. Las respuestas correctas se basan en el uso de una sal, hash con clave, PBKDF2, etc. – dtb
+1 - Este es un gran ejemplo de una pequeña pregunta que parece perfectamente inocente en la superficie pero que en realidad es un brillante punto de entrada a un mucho más grande, muy turbio y muy importante campo de minas. –