Start · Sprachen · PHP · Referenz · mcrypt_get_iv_size

mcrypt_get_iv_size

Funktion

Gibt die Größe des Initialisierungsvektors (IV) in Bytes zurück, die für eine bestimmte Verschlüsselungsalgorithmus- und Modus-Kombination benötigt wird.

seit PHP 4.0.2 Kategorie: crypto

Signatur

mcrypt_get_iv_size(string $cipher, string $mode): int|false

Beschreibung

mcrypt_get_iv_size() ermittelt die Länge des Initialisierungsvektors (IV) in Bytes, der für den angegebenen Chiffre-Algorithmus in Kombination mit dem gewählten Betriebsmodus erforderlich ist. Diese Information wird benötigt, um mit mcrypt_create_iv() einen korrekt dimensionierten IV zu erzeugen, bevor eine Verschlüsselung durchgeführt wird.

Der IV ist ein zufälliger Ausgangswert, der sicherstellt, dass gleiche Klartexte zu unterschiedlichen Chiffretexten führen – selbst wenn derselbe Schlüssel verwendet wird. Er muss nicht geheim gehalten werden, sollte jedoch für jede Verschlüsselungsoperation einmalig und kryptographisch zufällig sein.

Die Funktion ist besonders nützlich, wenn der Algorithmus oder der Modus zur Laufzeit konfiguriert wird und die IV-Größe nicht statisch bekannt ist. Nicht alle Modi benötigen einen IV – in solchen Fällen gibt die Funktion 0 zurück.

Achtung: Die gesamte mcrypt-Erweiterung gilt seit PHP 7.1 als veraltet und wurde in PHP 7.2 entfernt. Für neuen Code sollten stattdessen openssl_*-Funktionen oder die sodium_*-Funktionen (libsodium) verwendet werden.

Parameter

Name Typ Default Beschreibung
$cipher Pflicht string Der Name des Verschlüsselungsalgorithmus, z. B. MCRYPT_RIJNDAEL_128, MCRYPT_DES oder MCRYPT_BLOWFISH. Es können die vordefinierten Konstanten oder deren String-Äquivalente verwendet werden.
$mode Pflicht string Der Betriebsmodus des Chiffre-Algorithmus, z. B. MCRYPT_MODE_CBC, MCRYPT_MODE_CFB, MCRYPT_MODE_ECB oder MCRYPT_MODE_OFB. Der Modus beeinflusst, ob und welche IV-Größe benötigt wird.

Rückgabewert

Typ
int|false
Beschreibung
Gibt die Größe des Initialisierungsvektors in Bytes als int zurück. Benötigt der gewählte Modus keinen IV (z. B. ECB), wird 0 zurückgegeben. Bei einem ungültigen Algorithmus oder Modus wird false zurückgegeben.

Beispiele

IV-Größe ermitteln und passenden IV erzeugen

<?php
// Algorithmus und Modus festlegen
$cipher = MCRYPT_RIJNDAEL_128; // AES-128
$mode   = MCRYPT_MODE_CBC;

// IV-Größe ermitteln
$ivSize = mcrypt_get_iv_size($cipher, $mode);

if ($ivSize === false) {
    die('Ungültiger Algorithmus oder Modus.');
}

echo "IV-Größe für AES-128/CBC: {$ivSize} Bytes\n";

// Passenden IV erzeugen
$iv = mcrypt_create_iv($ivSize, MCRYPT_RAND);

$key       = 'eingeheimerschluessel12345678901'; // 32 Bytes für AES-256
$plaintext = 'Vertraulicher Text';

$encrypted = mcrypt_encrypt($cipher, $key, $plaintext, $mode, $iv);
echo 'Verschlüsselt (Base64): ' . base64_encode($encrypted) . "\n";
?>
IV-Größe für AES-128/CBC: 16 Bytes Verschlüsselt (Base64): <Base64-kodierter Chiffretext>

IV-Größen verschiedener Algorithmen vergleichen

<?php
$combinations = [
    [MCRYPT_DES,         MCRYPT_MODE_CBC, 'DES/CBC'],
    [MCRYPT_BLOWFISH,    MCRYPT_MODE_CFB, 'Blowfish/CFB'],
    [MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC, 'AES-128/CBC'],
    [MCRYPT_RIJNDAEL_256,MCRYPT_MODE_CBC, 'Rijndael-256/CBC'],
    [MCRYPT_DES,         MCRYPT_MODE_ECB, 'DES/ECB (kein IV)'],
];

foreach ($combinations as [$cipher, $mode, $label]) {
    $size = mcrypt_get_iv_size($cipher, $mode);
    echo sprintf("%-25s => IV-Größe: %d Bytes\n", $label, $size);
}
?>
DES/CBC => IV-Größe: 8 Bytes Blowfish/CFB => IV-Größe: 8 Bytes AES-128/CBC => IV-Größe: 16 Bytes Rijndael-256/CBC => IV-Größe: 32 Bytes DES/ECB (kein IV) => IV-Größe: 0 Bytes

// Wichtig · Fallstricke

Deprecation: Die mcrypt-Erweiterung wurde in PHP 7.1 als veraltet markiert (E_DEPRECATED) und in PHP 7.2 vollständig entfernt. Alle Projekte sollten auf openssl_cipher_iv_length() oder libsodium (sodium_crypto_secretbox_*) migrieren.

Sicherheitshinweis: Der IV muss für jede Verschlüsselungsoperation kryptographisch zufällig sein. Verwenden Sie niemals einen statischen oder vorhersehbaren IV, da dies den Schutz des Chiffre-Modus vollständig untergräbt. Der IV darf zusammen mit dem Chiffretext übertragen werden, muss aber nicht geheim bleiben.

Der ECB-Modus benötigt keinen IV und gibt daher 0 zurück – er gilt jedoch als unsicher und sollte generell vermieden werden, da identische Klartextblöcke zu identischen Chiffretextblöcken führen.