Las contraseñas no deben estar encriptadas, deben tener un hash. El cifrado se puede revertir fácilmente si tiene la clave, y un atacante que haya logrado robar toda la base de datos probablemente también haya robado la clave. Un hash no se puede revertir fácilmente.
Cuando alguien intenta iniciar sesión, el servidor no descifra la contraseña almacenada. En su lugar, utiliza la contraseña proporcionada y comprueba si coincide con el hash almacenado de la contraseña.
Entonces, si una función hash está diseñada para ser difícil de revertir, ¿por qué las contraseñas terminan en texto sin formato? Debido a los ataques de fuerza bruta.
Si tiene un hash, simplemente intente hacer un hash de todas las contraseñas posibles y ver si obtiene una coincidencia. Es posible que deba probar un par de millones antes de encontrar una coincidencia, pero tarde o temprano lo hará. Si usa una lista de contraseñas comunes y las prueba primero, será rápido para descifrar contraseñas comunes como 123456
.
Para mantener tus contraseñas seguras, debes hacer que "tarde o temprano" signifique "tan tarde que no vale la pena el esfuerzo". Esto se hace mediante el uso de funciones hash diseñadas deliberadamente para ser lentas incluso en el hardware moderno, de modo que intentar millones y millones de contraseñas llevaría años o incluso milenios.
Sin embargo, muchos sitios utilizan funciones hash incorrectas (que son rápidas y, por lo tanto, fáciles de usar), o incluso peor: simplemente almacenan las contraseñas en texto plano o simplemente encriptadas. Por lo tanto, muchas contraseñas terminan en texto sin formato en manos de hackers.
Para obtener más información sobre el hashing, recomiendo esta pregunta .