Signatur
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
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öß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);
}
?>
// 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.