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