Signatur
Beschreibung
openssl_cipher_key_length() ermittelt die Schlüssellänge, die ein bestimmter Cipher-Algorithmus benötigt. Der Rückgabewert gibt an, wie viele Bytes der Schlüssel haben muss, damit er mit dem gewählten Algorithmus verwendet werden kann.
Diese Funktion ist besonders nützlich, wenn Schlüssel dynamisch generiert oder validiert werden sollen – beispielsweise beim Einsatz von openssl_encrypt() oder openssl_decrypt(). Anstatt die Schlüssellänge hartzucodieren, kann die korrekte Länge direkt aus dem Algorithmusnamen abgeleitet werden, was den Code robuster und weniger fehleranfällig macht.
Typische Algorithmen wie aes-128-cbc erfordern 16 Bytes, aes-256-gcm hingegen 32 Bytes. Die Funktion erkennt alle Algorithmen, die von der installierten OpenSSL-Bibliothek unterstützt werden und die über openssl_get_cipher_methods() aufgelistet werden können.
Wird ein unbekannter oder nicht unterstützter Algorithmusname übergeben, gibt die Funktion false zurück und erzeugt eine Warnung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $cipher_algo Pflicht | string | Der Name des Verschlüsselungsalgorithmus, z. B. 'aes-256-cbc' oder 'chacha20'. Groß-/Kleinschreibung wird ignoriert. |
Rückgabewert
int zurück, oder false, wenn der Algorithmus nicht erkannt wird oder nicht unterstützt wird.Beispiele
Schlüssellänge verschiedener Algorithmen abfragen
<?php
$algorithmen = [
'aes-128-cbc',
'aes-192-cbc',
'aes-256-cbc',
'aes-256-gcm',
'chacha20',
];
foreach ($algorithmen as $algo) {
$laenge = openssl_cipher_key_length($algo);
if ($laenge !== false) {
echo sprintf("%-20s => %d Bytes\n", $algo, $laenge);
} else {
echo sprintf("%-20s => nicht unterstützt\n", $algo);
}
}
Schlüssel dynamisch mit korrekter Länge generieren
<?php
$algo = 'aes-256-gcm';
$schluessellaenge = openssl_cipher_key_length($algo);
if ($schluessellaenge === false) {
throw new RuntimeException("Unbekannter Algorithmus: $algo");
}
// Kryptografisch sicheren Schlüssel in der exakt richtigen Länge erzeugen
$schluessel = random_bytes($schluessellaenge);
$iv_laenge = openssl_cipher_iv_length($algo);
$iv = random_bytes($iv_laenge);
$klartext = 'Geheime Nachricht';
$tag = '';
$chiffrat = openssl_encrypt($klartext, $algo, $schluessel, OPENSSL_RAW_DATA, $iv, $tag);
echo 'Verschlüsselt (hex): ' . bin2hex($chiffrat) . PHP_EOL;
echo 'Tag (hex): ' . bin2hex($tag) . PHP_EOL;
// Wichtig · Fallstricke
Verfügbarkeit: Die Funktion wurde erst mit PHP 8.2.0 eingeführt. In älteren PHP-Versionen kann die Schlüssellänge indirekt über den Rückgabewert von openssl_encrypt() und Dokumentation des Algorithmus ermittelt werden.
Sicherheitshinweis: Verwende die zurückgegebene Länge immer in Kombination mit random_bytes(), um kryptografisch sichere Schlüssel zu generieren. Funktionen wie md5() oder sha1() zur Schlüsselableitung sind unsicher – nutze stattdessen hash_hkdf() oder openssl_pbkdf2().
Die Funktion gibt die Schlüssellänge in Bytes zurück, nicht in Bits. Für aes-256-* sind das 32 Bytes = 256 Bit.