Start · Sprachen · PHP · Referenz · openssl_get_md_methods

openssl_get_md_methods

Funktion

Gibt ein Array aller auf dem System verfügbaren OpenSSL-Hash-Methoden (Message-Digest-Algorithmen) zurück.

seit PHP 5.3.0 Kategorie: crypto

Signatur

openssl_get_md_methods(bool $aliases = false): array

Beschreibung

openssl_get_md_methods() fragt die OpenSSL-Bibliothek nach allen unterstützten Digest-Algorithmen ab und gibt deren Namen als String-Array zurück. Typische Algorithmen sind sha256, sha512, sha1, md5 und viele weitere, abhängig von der installierten OpenSSL-Version.

Wird der Parameter $aliases auf true gesetzt, werden zusätzlich alle Alias-Namen mit ausgegeben, also alternative Schreibweisen für denselben Algorithmus (z. B. SHA256 neben sha256 oder ältere OpenSSL-interne Namen). Ohne Aliases enthält die Liste nur die kanonischen, einzigartigen Namen.

Die Funktion ist besonders nützlich, wenn ein PHP-Programm flexibel auf verschiedenen Servern mit unterschiedlichen OpenSSL-Versionen betrieben wird und sichergestellt werden soll, dass ein bestimmter Hash-Algorithmus tatsächlich verfügbar ist, bevor er in Funktionen wie openssl_digest() oder hash_hmac() verwendet wird.

Sicherheitshinweis: Nicht alle verfügbaren Algorithmen gelten als kryptografisch sicher. md5 und sha1 gelten heute als veraltet und sollten für sicherheitskritische Anwendungen durch sha256 oder stärkere Algorithmen ersetzt werden.

Parameter

Name Typ Default Beschreibung
$aliases bool false Wenn true, werden auch Alias-Namen für Digest-Algorithmen in der Rückgabe mit eingeschlossen. Standardmäßig (false) werden nur die kanonischen, eindeutigen Namen zurückgegeben.

Rückgabewert

Typ
array
Beschreibung
Ein indiziertes Array von Strings mit den Namen der verfügbaren Hash-/Digest-Methoden. Die Liste ist von der installierten OpenSSL-Bibliothek abhängig. Mit $aliases = true kann die Liste deutlich länger sein, da alternative Schreibweisen ebenfalls enthalten sind.

Beispiele

Alle verfügbaren Digest-Methoden auflisten

<?php
$methods = openssl_get_md_methods();
echo 'Anzahl verfügbarer Methoden: ' . count($methods) . PHP_EOL;
foreach ($methods as $method) {
    echo $method . PHP_EOL;
}
Anzahl verfügbarer Methoden: 42 blake2b512 blake2s256 md4 md5 ripemd160 sha1 sha224 sha256 sha384 sha512 ...

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

<?php
$requiredAlgorithm = 'sha256';
$availableMethods = openssl_get_md_methods();

if (in_array($requiredAlgorithm, $availableMethods, true)) {
    $data = 'Geheimer Text';
    $digest = openssl_digest($data, $requiredAlgorithm);
    echo 'SHA-256 Digest: ' . $digest . PHP_EOL;
} else {
    echo 'Der Algorithmus ' . $requiredAlgorithm . ' ist auf diesem System nicht verfügbar.' . PHP_EOL;
}
SHA-256 Digest: 3c2d8b6e3a5f9d4e7c1a2b8f6e4d9c3a1b7e5f2d4c6a8b9e1f3d5c7a2b4e6f8

Methoden mit Aliases abrufen und vergleichen

<?php
$ohneAliases = openssl_get_md_methods(false);
$mitAliases  = openssl_get_md_methods(true);

echo 'Ohne Aliases: ' . count($ohneAliases) . ' Einträge' . PHP_EOL;
echo 'Mit Aliases:  ' . count($mitAliases)  . ' Einträge' . PHP_EOL;

// Nur die Aliases anzeigen
$nurAliases = array_diff($mitAliases, $ohneAliases);
sort($nurAliases);
echo 'Beispiel-Aliases: ' . implode(', ', array_slice($nurAliases, 0, 5)) . PHP_EOL;
Ohne Aliases: 42 Einträge Mit Aliases: 89 Einträge Beispiel-Aliases: DSA, DSA-SHA, DSA-SHA1, DSS1, RSA-MD4

// Wichtig · Fallstricke

Veraltete Algorithmen: md5 und sha1 sind kryptografisch kompromittiert und sollten für Passwort-Hashing, digitale Signaturen oder Integritätsprüfungen in sicherheitskritischen Anwendungen nicht mehr verwendet werden. Bevorzuge sha256, sha384 oder sha512.

OpenSSL-Version: Die zurückgegebene Liste ist vollständig abhängig von der auf dem Server installierten OpenSSL-Version. Ein Algorithmus, der in der Entwicklungsumgebung verfügbar ist, muss auf dem Produktionsserver nicht zwingend vorhanden sein. Deshalb sollte die Verfügbarkeit zur Laufzeit geprüft werden.

Groß-/Kleinschreibung: Ohne Aliases sind die Namen meist kleingeschrieben. Bei der Prüfung mit in_array() empfiehlt sich ein strikter Vergleich (true als drittes Argument) oder eine Normalisierung per strtolower().