¿Se supone que debo almacenar hashes para contraseñas?

Sistema de usuario y contraseñas: estaba buscando en MD5 y me pregunto cuál es la práctica normal / buena para las contraseñas. En este momento, creo que la gente super encripta las contraseñas y almacena los hashes. Si es así, ¿cómo funciona la verificación de contraseña? Acabo de hacer que la contraseña de entrada vuelva a pasar por el proceso de cifrado y luego verifique el hash con el almacenado, ¿correcto?

Esta pregunta puede contradecir lo anterior, pero ¿mi sal debería ser un valor generado aleatoriamente? Si es así, ¿cuándo puede ser útil?

Editar: Además de las contraseñas, en un sistema de usuario, ¿qué otra cosa debería cifrarse como una buena práctica? ¿Cifran los nombres de usuario o cualquier otra cosa?

2da Edición: ¿Qué es un hash unidireccional? Quiero decir, técnicamente, ¿no puedo aplicar ingeniería inversa a mi código fuente? Tal vez esta sea una mala pregunta porque no sé mucho sobre hashing unidireccional.

Respuestas a la pregunta(11)

Su respuesta a la pregunta