Non utilizzare SHA1 o SHA256 , come suggerisce la maggior parte delle altre persone. Assolutamente non utilizzare MD5 .
SHA1/256 e MD5 sono entrambi progettati per creare checksum di file e stringhe (e altri tipi di dati, se necessario). Per questo motivo, sono progettati per essere il più veloci possibile, in modo che il checksum sia rapido da generare.
Questa velocità elevata rende molto più facile forzare le password, poiché un programma ben scritto può generare facilmente migliaia di hash ogni secondo.
Utilizzare invece un algoritmo lento progettato specificamente per le password. Sono progettati per richiedere un po' più di tempo per essere generati, con il vantaggio che gli attacchi di forza bruta diventano molto più difficili. Per questo motivo, le password saranno molto più sicure.
Non riscontrerai svantaggi significativi in termini di prestazioni se stai solo esaminando la crittografia delle singole password una alla volta, che è la normale implementazione della memorizzazione e del controllo delle password. È solo in blocco dove sta la vera differenza.
Personalmente mi piace bcrypt. Dovrebbe esserci una versione Perl disponibile, poiché una rapida ricerca su Google ha prodotto diverse possibili corrispondenze.