Signatur
Beschreibung
password_get_info() analysiert einen gegebenen Passwort-Hash und liefert Details über den verwendeten Algorithmus sowie die beim Erstellen gewählten Optionen (z. B. cost für bcrypt oder memory_cost, time_cost und threads für Argon2). Die Funktion ist nützlich, wenn man prüfen möchte, ob ein bereits gespeicherter Hash noch aktuellen Sicherheitsanforderungen genügt.
Das zurückgegebene Array enthält drei Schlüssel: algo (Algorithmus-ID oder null bei unbekanntem Hash), algoName (lesbarer Name wie "bcrypt" oder "argon2id") und options (assoziatives Array mit den verwendeten Parametern).
Typischerweise wird password_get_info() zusammen mit password_needs_rehash() eingesetzt: Zuerst prüft man, ob ein Hash veraltet ist, und bei Bedarf erzeugt man nach erfolgreichem Login mit password_hash() einen neuen Hash mit aktuellen Parametern. So lässt sich eine schrittweise Migration auf stärkere Algorithmen oder höhere Cost-Faktoren durchführen, ohne alle Passwörter sofort neu setzen zu müssen.
Unbekannte oder ungültige Hash-Strings führen nicht zu einem Fehler, sondern liefern algo = null und einen leeren options-Array, was eine sichere Auswertung ohne Exception-Behandlung ermöglicht.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $hash Pflicht | string | Der zu analysierende Passwort-Hash, typischerweise das Ergebnis von password_hash(). |
Rückgabewert
algo (Algorithmus-Konstante oder null), algoName (lesbarer Algorithmusname als string) und options (Array mit den Erstellungsoptionen wie cost, memory_cost etc.) zurück.Beispiele
Informationen eines bcrypt-Hashes ausgeben
<?php
$hash = password_hash('geheimesPasswort', PASSWORD_BCRYPT, ['cost' => 12]);
$info = password_get_info($hash);
echo 'Algorithmus-ID: ' . var_export($info['algo'], true) . PHP_EOL;
echo 'Algorithmus-Name: ' . $info['algoName'] . PHP_EOL;
echo 'Cost-Faktor: ' . $info['options']['cost'] . PHP_EOL;
Veralteten Hash erkennen und neu hashen
<?php
// Simulierter alter Hash aus der Datenbank (bcrypt, cost 10)
$alterHash = password_hash('nutzerPasswort', PASSWORD_BCRYPT, ['cost' => 10]);
$info = password_get_info($alterHash);
echo 'Aktueller Algorithmus: ' . $info['algoName'] . ', Cost: ' . $info['options']['cost'] . PHP_EOL;
// Neue Ziel-Optionen
$neueOptionen = ['cost' => 13];
if (password_needs_rehash($alterHash, PASSWORD_BCRYPT, $neueOptionen)) {
// Wird nur nach erfolgreichem Login ausgeführt, wenn das Klartext-Passwort bekannt ist
$neuerHash = password_hash('nutzerPasswort', PASSWORD_BCRYPT, $neueOptionen);
$neueInfo = password_get_info($neuerHash);
echo 'Neuer Algorithmus: ' . $neueInfo['algoName'] . ', Cost: ' . $neueInfo['options']['cost'] . PHP_EOL;
// $neuerHash in der Datenbank speichern ...
}
Unbekannten Hash sicher behandeln
<?php
$unbekannterHash = 'das-ist-kein-gueltiger-hash';
$info = password_get_info($unbekannterHash);
if ($info['algo'] === null) {
echo 'Unbekannter oder ungültiger Hash-Typ.' . PHP_EOL;
} else {
echo 'Algorithmus: ' . $info['algoName'] . PHP_EOL;
}
// Wichtig · Fallstricke
Sicherheitshinweis: password_get_info() gibt keine sicherheitskritischen Daten preis, die einen Angriff erleichtern würden — der Hash selbst bleibt unverändert. Dennoch sollten Hash-Werte niemals an den Client weitergegeben oder in Logs geschrieben werden.
Ab PHP 8.0 werden die Algorithmus-Konstanten (PASSWORD_BCRYPT, PASSWORD_ARGON2I, PASSWORD_ARGON2ID) als string-Werte statt als int-Werte zurückgegeben. Code, der auf den Rückgabewert von algo mit strengem Typ-Vergleich (===) prüft, sollte auf diesen Unterschied gegenüber PHP 7 getestet werden.
Die Funktion wirft keine Ausnahmen und gibt keine Warnungen aus — auch bei einem leeren String oder einem vollständig falschen Eingabewert wird immer ein Array mit algo = null zurückgeliefert.