Al momento della registrazione crei un sale unico. Quel sale ora fa parte dell'hash. Se guardi da vicino, vedrai che è incorporato nella prima parte dell'hash. Per controllare la password, utilizza il salt della password con hash precedente, quindi utilizzerai di nuovo lo stesso salt.
$correctPasswordHash = getPasswordFromDatabase($_POST['username']);
$hash = crypt($_POST['password'], $correctPasswordHash);
if ($correctPasswordHash === $hash) ...
Per renderlo più semplice e infallibile, usa la libreria password_compat
, che lo racchiude in un'API facile da usare, che sarà integrata anche in una versione futura di PHP. Controlla il suo codice sorgente per il corretto utilizzo di crypt
, poiché ci sono alcune insidie di cui devi occuparti. La libreria password_compat utilizza anche un confronto binario personalizzato invece di un semplice ===
per contrastare gli attacchi di tempismo.