Signatur
Beschreibung
hash_hmac_algos() liefert ein indiziertes Array mit den Namen aller Hash-Algorithmen, die für die HMAC-Berechnung via hash_hmac() verwendet werden können. Die zurückgegebenen Algorithmusnamen sind direkt als $algo-Parameter für hash_hmac() und hash_hmac_file() geeignet.
Die verfügbaren Algorithmen hängen von der installierten Version der zugrundeliegenden Hash-Bibliothek (z. B. OpenSSL oder die interne PHP-Implementierung) ab und können sich daher von System zu System unterscheiden. Im Gegensatz zu hash_algos() filtert diese Funktion Algorithmen heraus, die nicht HMAC-kompatibel sind (z. B. rein auf XOF oder SHAKE basierende Algorithmen).
Die Funktion eignet sich hervorragend, um zur Laufzeit zu prüfen, ob ein bestimmter Algorithmus auf dem Zielsystem verfügbar ist, bevor eine sicherheitskritische HMAC-Operation durchgeführt wird. So lassen sich portable und zukunftssichere Anwendungen entwickeln, die sich dynamisch an die verfügbaren Algorithmen anpassen.
Rückgabewert
hash_hmac() verfügbaren Algorithmusnamen enthält, z. B. 'sha256', 'sha512', 'md5'. Die Reihenfolge der Einträge ist nicht garantiert.Beispiele
Alle verfügbaren HMAC-Algorithmen auflisten
<?php
$algos = hash_hmac_algos();
echo 'Verfügbare HMAC-Algorithmen (' . count($algos) . '):\n';
echo implode(', ', $algos);
Prüfen, ob ein Algorithmus für HMAC verfügbar ist
<?php
$wantedAlgo = 'sha256';
if (in_array($wantedAlgo, hash_hmac_algos(), true)) {
$key = 'geheim';
$data = 'Wichtige Nachricht';
$hmac = hash_hmac($wantedAlgo, $data, $key);
echo 'HMAC-SHA256: ' . $hmac . PHP_EOL;
} else {
throw new RuntimeException(
"Algorithmus '{$wantedAlgo}' wird auf diesem System nicht unterstützt."
);
}
Unterschied zwischen hash_algos und hash_hmac_algos
<?php
$allAlgos = hash_algos();
$hmacAlgos = hash_hmac_algos();
$notHmacCompatible = array_diff($allAlgos, $hmacAlgos);
echo 'Nicht HMAC-kompatible Algorithmen:' . PHP_EOL;
foreach ($notHmacCompatible as $algo) {
echo ' - ' . $algo . PHP_EOL;
}
// Wichtig · Fallstricke
Sicherheitshinweis: Nicht alle verfügbaren Algorithmen sind gleich sicher. Für sicherheitskritische HMAC-Operationen sollten ausschließlich moderne Algorithmen wie sha256, sha384 oder sha512 verwendet werden. Von der Nutzung von md5 oder sha1 für Sicherheitszwecke wird dringend abgeraten, da diese als kryptografisch schwach gelten.
Diese Funktion wurde in PHP 7.2.0 eingeführt als klarere Alternative zum vorherigen Workaround, bei dem man hash_algos() nutzte und manuell filtern musste. Vor PHP 7.2 gab es keine offizielle Möglichkeit, programmatisch zwischen HMAC-kompatiblen und inkompatiblen Algorithmen zu unterscheiden.