Start · Sprachen · PHP · Referenz · password_algos

password_algos

Funktion

Gibt ein Array mit den IDs aller verfügbaren Passwort-Hashing-Algorithmen zurück, die von <code>password_hash()</code> unterstützt werden.

seit PHP 7.4.0 Kategorie: crypto

Signatur

password_algos(): array

Beschreibung

password_algos() liefert eine Liste aller auf dem aktuellen System registrierten Passwort-Hashing-Algorithmen. Diese Funktion ist besonders nützlich, um zur Laufzeit zu prüfen, welche Algorithmen verfügbar sind, bevor man sie mit password_hash() oder password_needs_rehash() verwendet.

Die Rückgabe enthält typischerweise die Bezeichner wie '2y' (bcrypt), 'argon2i' und 'argon2id' — sofern PHP mit den entsprechenden Bibliotheken kompiliert wurde. Die Verfügbarkeit von Argon2-Varianten hängt davon ab, ob die libargon2-Bibliothek beim Kompilieren eingebunden war.

Damit lassen sich Anwendungen schreiben, die den sichersten verfügbaren Algorithmus automatisch auswählen, ohne hartcodierte Algorithmus-Namen zu verwenden, die auf manchen Systemen fehlen könnten.

Die zurückgegebenen IDs entsprechen den Konstanten PASSWORD_BCRYPT, PASSWORD_ARGON2I und PASSWORD_ARGON2ID und können direkt an password_hash() übergeben werden.

Rückgabewert

Typ
array
Beschreibung
Gibt ein indiziertes Array mit den String-IDs aller verfügbaren Passwort-Hashing-Algorithmen zurück, z. B. ['2y', 'argon2i', 'argon2id']. Das Array ist nie leer, da mindestens bcrypt ('2y') immer verfügbar ist.

Beispiele

Alle verfügbaren Algorithmen ausgeben

<?php
$algos = password_algos();
echo "Verfügbare Passwort-Algorithmen:" . PHP_EOL;
foreach ($algos as $algo) {
    echo " - " . $algo . PHP_EOL;
}
Verfügbare Passwort-Algorithmen: - 2y - argon2i - argon2id

Automatisch den besten verfügbaren Algorithmus auswählen

<?php
/**
 * Wählt den sichersten verfügbaren Algorithmus:
 * Argon2id > Argon2i > bcrypt
 */
function getBestPasswordAlgo(): string {
    $algos = password_algos();

    if (in_array('argon2id', $algos, true)) {
        return PASSWORD_ARGON2ID;
    }
    if (in_array('argon2i', $algos, true)) {
        return PASSWORD_ARGON2I;
    }
    return PASSWORD_BCRYPT;
}

$algo = getBestPasswordAlgo();
$passwort = 'meinGeheimesPasswort123';
$hash = password_hash($passwort, $algo);

echo "Verwendeter Algorithmus: " . $algo . PHP_EOL;
echo "Hash: " . $hash . PHP_EOL;
echo "Gültig: " . (password_verify($passwort, $hash) ? 'Ja' : 'Nein') . PHP_EOL;
Verwendeter Algorithmus: argon2id Hash: $argon2id$v=19$m=65536,t=4,p=1$... Gültig: Ja

Prüfen ob Argon2id verfügbar ist

<?php
if (in_array('argon2id', password_algos(), true)) {
    echo "Argon2id ist verfügbar – empfohlener Algorithmus wird verwendet." . PHP_EOL;
} else {
    echo "Argon2id nicht verfügbar – Rückfall auf bcrypt." . PHP_EOL;
}
Argon2id ist verfügbar – empfohlener Algorithmus wird verwendet.

// Wichtig · Fallstricke

Sicherheitshinweis: Es wird empfohlen, nach Möglichkeit PASSWORD_ARGON2ID zu verwenden, da dieser Algorithmus sowohl gegen GPU-Brute-Force- als auch gegen Side-Channel-Angriffe gehärtet ist. Bcrypt (PASSWORD_BCRYPT) ist ein sicherer Rückfall, begrenzt Passwörter jedoch auf 72 Bytes.

Die Verfügbarkeit von Argon2-Algorithmen kann je nach Hosting-Umgebung variieren. Mit password_algos() lässt sich dies zuverlässig zur Laufzeit prüfen, statt auf Konstanten zu vertrauen, die bei fehlender Kompilier-Unterstützung ggf. nicht definiert sind.

Die Funktion wurde in PHP 7.4.0 eingeführt. In früheren Versionen kann die Verfügbarkeit von Argon2 nur indirekt über das Vorhandensein der Konstante PASSWORD_ARGON2ID geprüft werden.