Start · Sprachen · PHP · Referenz · openssl_cipher_key_length

openssl_cipher_key_length

Funktion

Gibt die erforderliche Schlüssellänge (in Bytes) für einen angegebenen Verschlüsselungsalgorithmus zurück.

seit PHP 8.2.0 Kategorie: crypto

Signatur

openssl_cipher_key_length(string $cipher_algo): int|false

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

Typ
int|false
Beschreibung
Gibt die benötigte Schlüssellänge in Bytes als 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);
    }
}
aes-128-cbc => 16 Bytes aes-192-cbc => 24 Bytes aes-256-cbc => 32 Bytes aes-256-gcm => 32 Bytes chacha20 => 32 Bytes

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.