Signatur
Beschreibung
mcrypt_enc_is_block_mode() ermittelt, ob der aktuell geöffnete Verschlüsselungsmodus eine blockweise Ausgabe produziert. Block-Modi wie CBC oder ECB geben immer vollständige Blöcke zurück, während Stream-Modi wie CFB oder OFB byteweise arbeiten und daher false liefern.
Die Funktion wird typischerweise nach dem Öffnen eines Verschlüsselungs-Deskriptors mit mcrypt_module_open() aufgerufen, um das Verhalten des Modus dynamisch zu ermitteln – beispielsweise um zu entscheiden, ob ein Padding-Algorithmus angewendet werden muss.
Das Wissen, ob ein Modus blockweise arbeitet, ist besonders wichtig beim Verschlüsseln von Daten beliebiger Länge: Bei Block-Modi muss die Eingabe auf ein Vielfaches der Blockgröße aufgefüllt werden, bei Stream-Modi entfällt dieser Schritt.
Achtung: Die gesamte mcrypt-Erweiterung ist seit PHP 7.1.0 als veraltet markiert und wurde in PHP 7.2.0 vollständig entfernt. Für neue Projekte sollte stattdessen openssl_encrypt() oder die sodium-Erweiterung verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $td Pflicht | resource | Der Verschlüsselungs-Deskriptor, der zuvor mit mcrypt_module_open() geöffnet wurde. |
Rückgabewert
true zurück, wenn der geöffnete Modus blockweise Ausgabe erzeugt (z. B. CBC, ECB), und false, wenn er byteweise/stream-artig arbeitet (z. B. CFB, OFB).Beispiele
Modus auf blockweise Ausgabe prüfen (CBC vs. CFB)
<?php
// CBC-Modus prüfen (Block-Modus)
$td_cbc = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
if (mcrypt_enc_is_block_mode($td_cbc)) {
echo "CBC erzeugt blockweise Ausgabe — Padding erforderlich.\n";
} else {
echo "CBC ist ein Stream-Modus.\n";
}
mcrypt_module_close($td_cbc);
// CFB-Modus prüfen (Stream-Modus)
$td_cfb = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CFB, '');
if (mcrypt_enc_is_block_mode($td_cfb)) {
echo "CFB erzeugt blockweise Ausgabe.\n";
} else {
echo "CFB ist ein Stream-Modus — kein Padding nötig.\n";
}
mcrypt_module_close($td_cfb);
Dynamisches Padding bei Block-Modus anwenden
<?php
$cipher = MCRYPT_RIJNDAEL_128;
$mode = MCRYPT_MODE_CBC;
$key = str_pad('geheimschluessel', 16, '\0');
$iv_size = mcrypt_get_iv_size($cipher, $mode);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$td = mcrypt_module_open($cipher, '', $mode, '');
$plaintext = 'Hallo Welt!';
if (mcrypt_enc_is_block_mode($td)) {
// Padding auf Blockgröße auffüllen
$block_size = mcrypt_enc_get_block_size($td);
$pad_length = $block_size - (strlen($plaintext) % $block_size);
$plaintext .= str_repeat(chr($pad_length), $pad_length);
echo "Padding wurde angewendet, Länge nach Padding: " . strlen($plaintext) . " Bytes\n";
}
mcrypt_generic_init($td, $key, $iv);
$ciphertext = mcrypt_generic($td, $plaintext);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
echo "Verschlüsselt (hex): " . bin2hex($ciphertext) . "\n";
// Wichtig · Fallstricke
Deprecation: Die mcrypt-Erweiterung wurde in PHP 7.1.0 als veraltet markiert (deprecated) und in PHP 7.2.0 vollständig entfernt. Diese Funktion steht in modernen PHP-Versionen nicht mehr zur Verfügung.
Für neue Projekte oder bei der Migration bestehender Anwendungen sollte openssl_encrypt() / openssl_decrypt() oder die libsodium-Erweiterung (sodium_crypto_secretbox() u. a.) verwendet werden, die deutlich sicherer und aktiv gepflegt sind.
Bei Block-Modi ist korrektes Padding essenziell: Fehlendes oder falsches Padding kann zu Padding-Oracle-Angriffen führen. Verwende daher immer authentifizierte Verschlüsselung (z. B. AES-GCM via OpenSSL), die Integrität und Vertraulichkeit kombiniert.