Como se muestra en la imagen de arriba, si la contraseña está encriptada, siempre es un secreto oculto donde alguien puede extraer la contraseña de texto sin formato. Sin embargo, cuando se cambia la contraseña, está relajado, ya que casi no hay ningún método para recuperar la contraseña del valor hash.
Extraído de contraseñas cifradas frente a hash: ¿cuál es mejor?
¿Es bueno el cifrado?
Las contraseñas de texto sin formato pueden cifrarse utilizando algoritmos de cifrado simétricos como DES, AES o con cualquier otro algoritmo y almacenarse dentro de la base de datos. En la autenticación (confirmando la identidad con el nombre de usuario y la contraseña), la aplicación descifrará la contraseña cifrada almacenada en la base de datos y la comparará con la contraseña proporcionada por el usuario para la igualdad. En este tipo de enfoque de manejo de contraseña, incluso si alguien tiene acceso a las tablas de la base de datos, las contraseñas no serán simplemente reutilizables. Sin embargo, también hay una mala noticia en este enfoque. Si de alguna manera alguien obtiene el algoritmo criptográfico junto con la clave utilizada por su aplicación, él / ella podrá ver todas las contraseñas de usuario almacenadas en su base de datos mediante descifrado. "Esta es la mejor opción que tengo", puede gritar un desarrollador de software, pero ¿hay una mejor manera?
Función hash criptográfica (solo unidireccional)
Sí lo hay, puede que hayas perdido el punto aquí. ¿Notó que no es necesario descifrar y comparar? Si hay un enfoque de conversión de un solo sentido donde la contraseña se puede convertir en alguna palabra convertida, pero la operación inversa (generación de contraseña a partir de la palabra convertida) es imposible. Ahora, incluso si alguien tiene acceso a la base de datos, no hay forma de que las contraseñas se reproduzcan o extraigan utilizando las palabras convertidas. En este enfoque, difícilmente habrá algunos que puedan conocer las contraseñas secretas de sus usuarios; y esto protegerá a los usuarios que usan la misma contraseña en múltiples aplicaciones. ¿Qué algoritmos se pueden usar para este enfoque?