Signatur
Beschreibung
Die Funktion sodium_crypto_pwhash_scryptsalsa208sha256_str_verify() vergleicht ein Klartextpasswort mit einem gespeicherten Hash-String, der zuvor mit dem scrypt-Algorithmus (kombiniert mit Salsa20/8 und SHA-256) erzeugt wurde. Der Hash-String enthält dabei alle nötigen Informationen – Salt, Algorithmusparameter und den eigentlichen Hash –, sodass kein separater Salt-Parameter benötigt wird.
Im Gegensatz zu einem einfachen String-Vergleich arbeitet diese Funktion timing-sicher (constant-time comparison), um Timing-Angriffe zu verhindern. Sie sollte immer anstelle eines manuellen Vergleichs wie === oder hash_equals() verwendet werden, wenn scrypt-Passwort-Hashes geprüft werden.
Typischer Einsatz: Ein Benutzer gibt sein Passwort beim Login ein, und die Anwendung vergleicht es mit dem in der Datenbank gespeicherten Hash. Die Funktion gibt true zurück, wenn das Passwort korrekt ist, andernfalls false.
Für neue Anwendungen wird in der Regel sodium_crypto_pwhash_str_verify() mit dem Argon2id-Algorithmus empfohlen. scrypt bleibt jedoch eine bewährte, sichere Alternative, insbesondere wenn Kompatibilität mit bestehenden Systemen gefragt ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $hash Pflicht | string | Der zuvor mit sodium_crypto_pwhash_scryptsalsa208sha256_str() erzeugte Hash-String. Er enthält Salt und Algorithmusparameter in einem einzigen, lesbaren Format. |
|
| $password Pflicht | string | Das zu prüfende Klartextpasswort, das der Benutzer eingegeben hat. |
Rückgabewert
true zurück, wenn das Passwort zum gespeicherten Hash passt, andernfalls false. Bei ungültigem oder manipuliertem Hash-String wird ebenfalls false zurückgegeben.Beispiele
Passwort-Hash erstellen und verifizieren
<?php
$password = 'MeinSicheresPasswort123!';
// Hash beim Registrieren des Benutzers erzeugen und in der DB speichern
$hash = sodium_crypto_pwhash_scryptsalsa208sha256_str(
$password,
SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE,
SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE
);
echo "Erzeugter Hash: " . $hash . "\n";
// Beim Login: Passwort gegen den gespeicherten Hash prüfen
if (sodium_crypto_pwhash_scryptsalsa208sha256_str_verify($hash, $password)) {
echo "Passwort korrekt – Benutzer eingeloggt.\n";
} else {
echo "Falsches Passwort.\n";
}
Login-Überprüfung mit falschem Passwort
<?php
$passwortAusDb = sodium_crypto_pwhash_scryptsalsa208sha256_str(
'KorrektesPasswort',
SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_OPSLIMIT_INTERACTIVE,
SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_MEMLIMIT_INTERACTIVE
);
$eingegebenesPasswort = 'FalschesPasswort';
if (sodium_crypto_pwhash_scryptsalsa208sha256_str_verify($passwortAusDb, $eingegebenesPasswort)) {
echo "Zugang gewährt.\n";
} else {
echo "Zugang verweigert: Passwort stimmt nicht überein.\n";
// Keine weiteren Details an den Benutzer – kein Hinweis, was falsch ist
}
// Wichtig · Fallstricke
Sicherheitshinweise:
- Verwenden Sie diese Funktion niemals in Kombination mit
===oder anderen String-Vergleichen – nur der eingebaute Vergleich dieser Funktion ist timing-sicher. - Speichern Sie den Hash-String vollständig in der Datenbank – kürzen oder verändern Sie ihn nicht, da dies zu
false-Ergebnissen führt. - Falls
sodium_crypto_pwhash_scryptsalsa208sha256_str()eineSodiumExceptionwirft (z. B. bei zu wenig Arbeitsspeicher), sollte die Ausnahme abgefangen und der Benutzer nicht eingeloggt werden. - Für neue Projekte sollten Sie den moderneren Argon2id-Algorithmus via
sodium_crypto_pwhash_str_verify()oderpassword_verify()mitPASSWORD_ARGON2IDbevorzugen. - Der
$hash-Parameter muss ein gültiger scrypt-Hash-String sein, der mit dieser Bibliothek erzeugt wurde. Andere Hash-Formate (z. B. bcrypt) werden nicht erkannt und führen zufalse.