Signatur
Beschreibung
crypt_checksalt() validiert einen crypt-kompatiblen Einstellungsstring (auch als Salt bezeichnet) auf Korrektheit und Sicherheit. Die Funktion stammt aus der libxcrypt-Bibliothek und ist ab PHP 8.0 auf Systemen verfügbar, die libxcrypt unterstützen.
Ein Einstellungsstring kodiert das verwendete Hash-Verfahren (z. B. bcrypt mit $2y$, SHA-512 mit $6$ oder MD5 mit $1$) sowie die zugehörigen Parameter wie den Kostenfaktor. crypt_checksalt() gibt true zurück, wenn der String syntaktisch korrekt und das verwendete Verfahren als sicher eingestuft wird.
Die Funktion ist besonders nützlich, bevor ein bestehender Hash-Salt wiederverwendet wird, um sicherzustellen, dass er noch den aktuellen Sicherheitsanforderungen entspricht. Sie kann eingesetzt werden, um veraltete oder schwache Hashing-Algorithmen (z. B. DES oder MD5) zu erkennen und eine Neuberechnung des Passwort-Hashes zu erzwingen.
Für neue Anwendungen sollte password_hash() und password_verify() bevorzugt werden. crypt_checksalt() ist vor allem dann relevant, wenn legacy-Systeme migriert oder bestehende crypt()-Hashes überprüft werden müssen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $setting Pflicht | string | Der zu prüfende crypt-Einstellungsstring, wie er z. B. aus einem gespeicherten Hash-Wert extrahiert werden kann (z. B. $2y$12$...). |
Rückgabewert
true zurück, wenn der Einstellungsstring gültig und das verwendete Hash-Verfahren als sicher eingestuft wird. Gibt false zurück, wenn der String ungültig ist oder ein als unsicher geltendes Verfahren verwendet.Beispiele
Bcrypt-Salt auf Gültigkeit prüfen
<?php
// Einen bcrypt-Hash erzeugen und dessen Einstellungsstring prüfen
$hash = crypt('meinPasswort', '$2y$12$usesomesillystringforsalt$');
// Den Einstellungsstring (Prefix + Parameter) aus dem Hash extrahieren
$setting = substr($hash, 0, 29); // $2y$12$ + 22 Zeichen Salt
if (crypt_checksalt($setting)) {
echo "Der Einstellungsstring ist gültig und sicher.";
} else {
echo "Der Einstellungsstring ist ungültig oder veraltet.";
}
Veralteten MD5-Salt erkennen und Rehash erzwingen
<?php
// Gespeicherter alter MD5-crypt-Hash (unsicheres Verfahren)
$storedHash = '$1$saltsalt$somethinghashed';
$setting = substr($storedHash, 0, strrpos($storedHash, '$', 3) + 1);
if (!crypt_checksalt($setting)) {
echo "Veraltetes Hash-Verfahren erkannt. Bitte Passwort neu hashen!";
// Hier würde man z. B. password_hash() aufrufen, sobald das Klartextpasswort bekannt ist.
} else {
echo "Einstellungsstring ist aktuell und sicher.";
}
// Wichtig · Fallstricke
Verfügbarkeit: crypt_checksalt() ist nur auf Systemen verfügbar, die libxcrypt verwenden (vor allem Linux). Auf Windows oder macOS ohne libxcrypt steht die Funktion nicht zur Verfügung. Prüfe die Verfügbarkeit mit function_exists('crypt_checksalt').
Sicherheitshinweis: Als unsicher eingestufte Verfahren wie traditionelles DES, BigCrypt oder MD5 ($1$) liefern false. Dies sollte als Signal gewertet werden, betroffene Passwort-Hashes bei der nächsten Anmeldung neu zu berechnen – idealerweise mit password_hash() und PASSWORD_BCRYPT oder PASSWORD_ARGON2ID.
Keine Ersatz für password_needs_rehash(): Für moderne Passwort-Hashes aus password_hash() sollte stattdessen password_needs_rehash() verwendet werden, da es Algorithmus und Kostenfaktor berücksichtigt.