Al registrarse, crea una sal única. Esa sal ahora es parte del hachís. Si miras de cerca, verás que está incrustado en la primera parte del hash. Para verificar la contraseña, use la sal de la contraseña hash anterior, por lo que está usando la misma sal nuevamente.
$correctPasswordHash = getPasswordFromDatabase($_POST['username']);
$hash = crypt($_POST['password'], $correctPasswordHash);
if ($correctPasswordHash === $hash) ...
Para hacer esto más fácil y más infalible, use la biblioteca password_compat
, que envuelve esto en una API fácil de usar, que también se integrará en una versión futura de PHP. Inspeccione su código fuente para el uso correcto de crypt
, ya que hay algunas trampas de las que debe ocuparse. La biblioteca password_compat también utiliza una comparación binaria personalizada en lugar de un simple ===
para frustrar los ataques de tiempo.