Vid registrering skapar du ett unikt salt. Det saltet är nu en del av hashen. Om du tittar noga ser du att det är inbäddat i den första delen av hashen. För att kontrollera lösenordet, använd det tidigare hashade lösenordets salt, så att du använder samma salt igen.
$correctPasswordHash = getPasswordFromDatabase($_POST['username']);
$hash = crypt($_POST['password'], $correctPasswordHash);
if ($correctPasswordHash === $hash) ...
För att göra detta enklare och mer idiotsäkert, använd password_compat-biblioteket
, som lindar in detta i ett lättanvänt API, som också kommer att integreras i en framtida version av PHP. Inspektera dess källkod för korrekt användning av crypt
, eftersom det finns några fallgropar du måste ta hand om. Password_compat-biblioteket använder också en anpassad binär jämförelse istället för en enkel ===
för att motverka timingattacker.