No utilices SHA1 o SHA256 , como sugiere la mayoría de la gente. Definitivamente no use MD5 .
SHA1/256 y MD5 están diseñados para crear sumas de verificación de archivos y cadenas (y otros tipos de datos, si es necesario). Debido a esto, están diseñados para ser lo más rápidos posible, de modo que la suma de verificación se genere rápidamente.
Esta alta velocidad hace que sea mucho más fácil aplicar fuerza bruta a las contraseñas, ya que un programa bien escrito puede generar fácilmente miles de hashes cada segundo.
En su lugar, utilice un algoritmo lento diseñado específicamente para contraseñas. Están diseñados para tardar un poco más en generarse, con la ventaja de que los ataques de fuerza bruta se vuelven mucho más difíciles. Debido a esto, las contraseñas serán mucho más seguras.
No experimentará ninguna desventaja de rendimiento significativa si solo desea cifrar contraseñas individuales una a la vez, que es la implementación normal de almacenamiento y verificación de contraseñas. Es solo a granel donde está la verdadera diferencia.
Personalmente, me gusta bcrypt. Debería haber una versión de Perl disponible, ya que una búsqueda rápida en Google arrojó varias coincidencias posibles.