Start · Sprachen · PHP · Referenz · openssl_cipher_iv_length

openssl_cipher_iv_length

Funktion

Gibt die erforderliche Länge des Initialisierungsvektors (IV) für einen bestimmten OpenSSL-Verschlüsselungsalgorithmus zurück.

seit PHP 5.3.3 Kategorie: crypto

Signatur

openssl_cipher_iv_length(string $cipher_algo): int|false

Beschreibung

openssl_cipher_iv_length() ermittelt, wie viele Bytes der Initialisierungsvektor (IV) für den angegebenen Verschlüsselungsalgorithmus haben muss. Ein IV ist ein zufälliger Startwert, der bei vielen symmetrischen Verschlüsselungsverfahren – insbesondere im CBC-, CFB- oder OFB-Modus – benötigt wird, um identische Klartexte zu unterschiedlichen Geheimtexten zu verschlüsseln.

Bevor man openssl_encrypt() oder openssl_decrypt() aufruft, sollte die korrekte IV-Länge mit dieser Funktion abgefragt und anschließend ein kryptografisch sicherer IV via random_bytes() erzeugt werden. Stimmt die IV-Länge nicht überein, schlägt die Verschlüsselung fehl oder liefert unsichere Ergebnisse.

Für Algorithmen, die keinen IV benötigen (z. B. AES-256-ECB), gibt die Funktion 0 zurück. Bei einem unbekannten oder nicht unterstützten Algorithmus wird false zurückgegeben und ein Fehler ausgelöst.

Parameter

Name Typ Default Beschreibung
$cipher_algo Pflicht string Name des Verschlüsselungsalgorithmus, z. B. 'AES-256-CBC' oder 'AES-128-GCM'. Eine vollständige Liste liefert openssl_get_cipher_methods().

Rückgabewert

Typ
int|false
Beschreibung
Gibt die erforderliche IV-Länge in Bytes als int zurück. Für Algorithmen ohne IV wird 0 zurückgegeben. Bei einem unbekannten Algorithmus wird false zurückgegeben.

Beispiele

IV-Länge ermitteln und sicheren IV erzeugen

<?php
$algo = 'AES-256-CBC';
$ivLength = openssl_cipher_iv_length($algo);

if ($ivLength === false) {
    throw new RuntimeException("Unbekannter Verschlüsselungsalgorithmus: $algo");
}

// Kryptografisch sicheren IV erzeugen
$iv = random_bytes($ivLength);

$key = random_bytes(32); // 256-Bit-Schlüssel
$plaintext = 'Geheime Nachricht';

$ciphertext = openssl_encrypt($plaintext, $algo, $key, OPENSSL_RAW_DATA, $iv);

echo 'IV-Länge: ' . $ivLength . ' Bytes' . PHP_EOL;
echo 'Chiffretext (Base64): ' . base64_encode($ciphertext) . PHP_EOL;
IV-Länge: 16 Bytes Chiffretext (Base64): <zufälliger Base64-String>

IV-Längen verschiedener Algorithmen vergleichen

<?php
$algorithms = [
    'AES-128-CBC',
    'AES-256-CBC',
    'AES-256-GCM',
    'AES-256-ECB',
    'DES-CBC',
    'CAMELLIA-256-CBC',
];

foreach ($algorithms as $algo) {
    $length = openssl_cipher_iv_length($algo);
    if ($length === false) {
        echo "$algo: nicht unterstützt" . PHP_EOL;
    } else {
        echo "$algo: IV-Länge = $length Bytes" . PHP_EOL;
    }
}
AES-128-CBC: IV-Länge = 16 Bytes AES-256-CBC: IV-Länge = 16 Bytes AES-256-GCM: IV-Länge = 12 Bytes AES-256-ECB: IV-Länge = 0 Bytes DES-CBC: IV-Länge = 8 Bytes CAMELLIA-256-CBC: IV-Länge = 16 Bytes

// Wichtig · Fallstricke

Sicherheitshinweis: Verwende den ECB-Modus (AES-256-ECB) niemals für sensible Daten, obwohl er keinen IV benötigt – er ist kryptografisch unsicher, da identische Klartextblöcke zu identischen Chiffretextblöcken führen.

IV-Wiederverwendung vermeiden: Ein IV darf für denselben Schlüssel niemals zweimal verwendet werden. Erzeuge ihn stets neu mit random_bytes() und speichere ihn zusammen mit dem Chiffretext (er muss nicht geheim bleiben).

GCM-Modus: Bei Verwendung von AES-256-GCM sollte die IV-Länge von 12 Bytes (96 Bit) eingehalten werden, da dies dem NIST-Standard entspricht und die beste Performance liefert. Der Authentifizierungs-Tag sollte zusätzlich gespeichert werden.