Start · Sprachen · PHP · Referenz · password_get_info

password_get_info

Funktion

Gibt Informationen über einen mit <code>password_hash()</code> erzeugten Hash zurück, z. B. verwendeter Algorithmus und Optionen.

seit PHP 5.5.0 Kategorie: crypto

Signatur

password_get_info(string $hash): array

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

Typ
array
Beschreibung
Gibt ein assoziatives Array mit den Schlüsseln 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;
Algorithmus-ID: 1 Algorithmus-Name: bcrypt Cost-Faktor: 12

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 ...
}
Aktueller Algorithmus: bcrypt, Cost: 10 Neuer Algorithmus: bcrypt, Cost: 13

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;
}
Unbekannter oder ungültiger Hash-Typ.

// 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.