Start · Sprachen · PHP · Referenz · hash_algos

hash_algos

Funktion

Gibt ein Array mit allen vom aktuellen PHP-Build unterstützten Hashing-Algorithmen zurück.

seit PHP 5.1.2 Kategorie: crypto

Signatur

hash_algos(): array

Beschreibung

hash_algos() liefert eine indizierte Liste aller Hashing-Algorithmen, die von der installierten PHP-Version und der zugehörigen Hash-Extension unterstützt werden. Die zurückgegebenen Algorithmus-Namen können direkt als erstes Argument an Funktionen wie hash(), hash_file() oder hash_hmac() übergeben werden.

Die verfügbaren Algorithmen variieren je nach PHP-Version und Kompilierungsoptionen des Systems. Typischerweise enthält die Liste Algorithmen wie md5, sha1, sha256, sha512, whirlpool, ripemd160 sowie diverse weitere wie crc32, adler32 oder moderne Verfahren wie sha3-256.

Die Funktion ist besonders nützlich, wenn eine Anwendung prüfen möchte, ob ein bestimmter Algorithmus auf dem Zielsystem verfügbar ist, bevor sie ihn einsetzt – etwa durch Kombination mit in_array(). Außerdem eignet sie sich, um in Entwicklungsumgebungen schnell einen Überblick über alle verfügbaren Optionen zu erhalten.

Seit PHP 7.2 enthält die Liste auch HMAC-fähige Algorithmen, die über hash_hmac_algos() separat abgerufen werden können, falls ausschließlich HMAC-kompatible Verfahren benötigt werden.

Rückgabewert

Typ
array
Beschreibung
Ein numerisch indiziertes array mit den Namen aller unterstützten Hashing-Algorithmen als Strings (z. B. 'sha256', 'md5'). Das Array ist stets nicht leer, da mindestens einige Basis-Algorithmen immer vorhanden sind.

Beispiele

Alle verfügbaren Algorithmen ausgeben

<?php
$algos = hash_algos();
echo 'Verfügbare Algorithmen (' . count($algos) . '):' . PHP_EOL;
foreach ($algos as $algo) {
    echo '  ' . $algo . PHP_EOL;
}
Verfügbare Algorithmen (67): md2 md4 md5 sha1 sha224 sha256 sha384 sha512/224 sha512/256 sha512 sha3-224 sha3-256 ...

Prüfen, ob ein bestimmter Algorithmus verfügbar ist

<?php
$wunschAlgorithmus = 'sha3-256';

if (in_array($wunschAlgorithmus, hash_algos(), true)) {
    $hash = hash($wunschAlgorithmus, 'Geheime Nachricht');
    echo 'SHA3-256 Hash: ' . $hash . PHP_EOL;
} else {
    // Fallback auf sha256, das immer verfügbar ist
    $hash = hash('sha256', 'Geheime Nachricht');
    echo 'Fallback SHA-256 Hash: ' . $hash . PHP_EOL;
}
SHA3-256 Hash: 4a7e2f9b1c83d05e6f28ab7d3c91e4b6582fd97a0e3c514b8d72069f1e7823c4

Nur kryptografisch relevante Algorithmen filtern

<?php
// Nur SHA-Familie und RIPEMD anzeigen (keine Checksummen wie crc32)
$algos = hash_algos();
$kryptoAlgos = array_filter($algos, function (string $algo): bool {
    return str_starts_with($algo, 'sha') || str_starts_with($algo, 'ripemd');
});

echo implode(', ', $kryptoAlgos) . PHP_EOL;
sha1, sha224, sha256, sha384, sha512/224, sha512/256, sha512, sha3-224, sha3-256, sha3-384, sha3-512, ripemd128, ripemd160, ripemd256, ripemd320

// Wichtig · Fallstricke

Sicherheitshinweis: Nicht alle von hash_algos() zurückgegebenen Algorithmen sind für kryptografische Zwecke geeignet. Algorithmen wie md5, sha1, crc32 oder adler32 sollten nicht für Passwort-Hashing, digitale Signaturen oder sicherheitsrelevante Anwendungen genutzt werden. Für Passwörter empfiehlt sich stets password_hash(). Für allgemeine kryptografische Hashes eignen sich sha256, sha512 oder sha3-256.

Seit PHP 7.2 steht hash_hmac_algos() zur Verfügung, welche ausschließlich die für HMAC verwendbaren Algorithmen zurückgibt – also eine Teilmenge von hash_algos().

Die exakte Liste der verfügbaren Algorithmen ist plattformabhängig und kann zwischen verschiedenen Server-Umgebungen abweichen. Portabler Code sollte daher vor der Nutzung selten vorhandener Algorithmen stets eine Prüfung per in_array() vornehmen.