Signatur
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
$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;
}
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;
}
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;
// 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.