Start · Sprachen · PHP · Referenz · hash_hmac_algos

hash_hmac_algos

Funktion

Gibt eine Liste aller für <code>hash_hmac()</code> geeigneten Hash-Algorithmen zurück, die von der aktuellen PHP-Installation unterstützt werden.

seit PHP 7.2.0 Kategorie: crypto

Signatur

hash_hmac_algos(): array

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

Typ
array
Beschreibung
Ein indiziertes Array aus Strings, das alle auf dem aktuellen System für 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);
Verfügbare HMAC-Algorithmen (56): md2, md4, md5, sha1, sha224, sha256, sha384, sha512/224, sha512/256, sha512, sha3-224, sha3-256, sha3-384, sha3-512, ...

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."
    );
}
HMAC-SHA256: 3c4f2e1a7b8d9c0e5f6a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2

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;
}
Nicht HMAC-kompatible Algorithmen: - shake128 - shake256 - ...

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