Signatur
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
['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;
}
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;
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;
}
// 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.