Start · Sprachen · PHP · Referenz · openssl_get_cipher_methods

openssl_get_cipher_methods

Funktion

Gibt ein Array aller verfügbaren OpenSSL-Verschlüsselungsmethoden (Cipher-Algorithmen) zurück.

seit PHP 5.3.0 Kategorie: crypto

Signatur

openssl_get_cipher_methods(bool $aliases = false): array

Beschreibung

openssl_get_cipher_methods() liefert eine Liste aller Verschlüsselungsalgorithmen (Ciphers), die von der installierten OpenSSL-Bibliothek unterstützt werden. Die Rückgabe ist ein indiziertes Array mit Zeichenketten wie 'AES-256-CBC', 'AES-128-GCM' oder 'DES-EDE3-CBC'.

Mit dem Parameter $aliases können zusätzlich alle Alias-Namen für Ciphers in die Liste aufgenommen werden. Aliasse sind alternative Bezeichnungen für denselben Algorithmus (z. B. 'AES256' als Alias für 'AES-256-CBC'). Ohne Aliasse ist die Liste in der Regel kürzer und konsistenter.

Die Funktion ist nützlich, wenn dynamisch geprüft werden soll, ob ein bestimmter Algorithmus auf dem aktuellen System unterstützt wird, bevor er z. B. in openssl_encrypt() oder openssl_decrypt() verwendet wird. So lassen sich plattformübergreifende Kompatibilitätsprobleme frühzeitig erkennen.

Da die verfügbaren Methoden von der Version und Kompilierung der OpenSSL-Bibliothek abhängen, kann das Ergebnis je nach Server-Umgebung unterschiedlich ausfallen. Ältere oder als unsicher geltende Algorithmen wie DES oder RC4 sollten gemieden werden.

Parameter

Name Typ Default Beschreibung
$aliases bool false Wenn true, werden auch Alias-Namen für Cipher-Algorithmen in die zurückgegebene Liste aufgenommen. Standardmäßig (false) werden nur die kanonischen Namen zurückgegeben.

Rückgabewert

Typ
array
Beschreibung
Ein indiziertes Array von Zeichenketten mit den Namen aller verfügbaren Verschlüsselungsmethoden. Bei $aliases = true enthält das Array zusätzlich Alias-Bezeichnungen. Das Array ist in der Regel alphabetisch sortiert.

Beispiele

Alle verfügbaren Cipher-Methoden auflisten

<?php
$methods = openssl_get_cipher_methods();
echo 'Anzahl verfügbarer Cipher-Methoden: ' . count($methods) . PHP_EOL;

// Erste 5 Methoden ausgeben
foreach (array_slice($methods, 0, 5) as $method) {
    echo $method . PHP_EOL;
}
Anzahl verfügbarer Cipher-Methoden: 85 aes-128-cbc aes-128-cbc-hmac-sha1 aes-128-cbc-hmac-sha256 aes-128-cfb aes-128-cfb1

Prüfen, ob ein bestimmter Algorithmus unterstützt wird

<?php
$desired = 'AES-256-GCM';
$methods = openssl_get_cipher_methods();

// Groß-/Kleinschreibung ignorieren
$methodsLower = array_map('strtolower', $methods);

if (in_array(strtolower($desired), $methodsLower, true)) {
    echo "Algorithmus '{$desired}' wird unterstützt." . PHP_EOL;

    $key = random_bytes(32);
    $iv  = random_bytes(openssl_cipher_iv_length($desired));
    $plaintext  = 'Geheime Nachricht';
    $ciphertext = openssl_encrypt($plaintext, $desired, $key, OPENSSL_RAW_DATA, $iv);
    echo 'Verschlüsselt (base64): ' . base64_encode($ciphertext) . PHP_EOL;
} else {
    echo "Algorithmus '{$desired}' wird auf diesem System NICHT unterstützt." . PHP_EOL;
}
Algorithmus 'AES-256-GCM' wird unterstützt. Verschlüsselt (base64): <base64-kodierter Ciphertext>

Unsichere Algorithmen aus der Liste filtern

<?php
$unsicher = ['des', 'rc2', 'rc4', 'bf', 'idea', 'seed'];
$methods  = openssl_get_cipher_methods();

$sicher = array_filter($methods, function (string $method) use ($unsicher): bool {
    foreach ($unsicher as $prefix) {
        if (stripos($method, $prefix) === 0) {
            return false;
        }
    }
    return true;
});

echo 'Sichere Methoden: ' . count($sicher) . PHP_EOL;
echo 'Herausgefiltert:  ' . (count($methods) - count($sicher)) . PHP_EOL;
Sichere Methoden: 72 Herausgefiltert: 13

// Wichtig · Fallstricke

Sicherheitshinweis: Nicht alle zurückgegebenen Algorithmen sind gleich sicher. Methoden wie DES, RC4, RC2 oder Blowfish gelten als veraltet und sollten nicht mehr verwendet werden. Bevorzuge moderne, authentifizierte Verschlüsselung wie AES-256-GCM oder AES-256-CBC in Kombination mit einem HMAC.

Die Groß-/Kleinschreibung der Methodennamen kann je nach OpenSSL-Version variieren. Es empfiehlt sich daher, beim Vergleich strtolower() zu verwenden, da OpenSSL selbst die Namen meist kleingeschrieben zurückgibt.

Wenn $aliases = true gesetzt wird, kann die Liste deutlich länger sein und doppelte funktionale Einträge enthalten. Für programmatische Prüfungen ist $aliases = false (Standard) in der Regel sauberer.