Signatur
Beschreibung
mcrypt_enc_is_block_algorithm() gibt true zurück, wenn der dem übergebenen Verschlüsselungs-Deskriptor zugrunde liegende Algorithmus ein Blockalgorithmus ist. Blockalgorithmen wie AES, DES oder Blowfish arbeiten mit festen Datenblöcken (z. B. 8 oder 16 Byte) und erfordern daher ggf. ein Padding, wenn die Eingabedaten kein Vielfaches der Blockgröße sind. Stromalgorithmen hingegen verschlüsseln Byte für Byte.
Die Funktion ist nützlich, wenn Code generisch für verschiedene Algorithmen geschrieben werden soll und abhängig vom Algorithmustyp unterschiedliche Vorverarbeitungsschritte (z. B. Padding) durchgeführt werden müssen. So kann zur Laufzeit geprüft werden, ob die Eingabe auf ein Vielfaches der Blockgröße aufgefüllt werden muss.
Wichtig: Die gesamte mcrypt-Erweiterung gilt seit PHP 7.1 als veraltet (deprecated) und wurde in PHP 7.2 vollständig entfernt. Für neue Projekte sollte stattdessen openssl_encrypt()/openssl_decrypt() oder die sodium-Erweiterung verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $td Pflicht | resource | Ein gültiger Verschlüsselungs-Deskriptor, der zuvor mit mcrypt_module_open() geöffnet wurde. |
Rückgabewert
true zurück, wenn der Algorithmus des geöffneten Deskriptors ein Blockalgorithmus ist, andernfalls false (Stromalgorithmus).Beispiele
Prüfen, ob AES ein Blockalgorithmus ist
<?php
// Verschlüsselungs-Deskriptor für AES (Rijndael-128) im CBC-Modus öffnen
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
if (mcrypt_enc_is_block_algorithm($td)) {
echo 'Rijndael-128 ist ein Blockalgorithmus.' . PHP_EOL;
echo 'Blockgröße: ' . mcrypt_enc_get_block_size($td) . ' Byte' . PHP_EOL;
} else {
echo 'Rijndael-128 ist ein Stromalgorithmus.' . PHP_EOL;
}
mcrypt_module_close($td);
Algorithmustyp-abhängiges Padding
<?php
$algorithm = MCRYPT_RIJNDAEL_128;
$mode = MCRYPT_MODE_CBC;
$key = 'einGeheimesKey12'; // 16 Byte
$iv = mcrypt_create_iv(mcrypt_get_iv_size($algorithm, $mode), MCRYPT_RAND);
$td = mcrypt_module_open($algorithm, '', $mode, '');
mcrypt_generic_init($td, $key, $iv);
$plaintext = 'Hallo Welt!';
if (mcrypt_enc_is_block_algorithm($td)) {
// Padding auf Vielfaches der Blockgröße
$blockSize = mcrypt_enc_get_block_size($td);
$padLength = $blockSize - (strlen($plaintext) % $blockSize);
$plaintext .= str_repeat(chr($padLength), $padLength);
echo 'Padding angewendet, neue Länge: ' . strlen($plaintext) . ' Byte' . PHP_EOL;
} else {
echo 'Kein Padding nötig (Stromalgorithmus).' . PHP_EOL;
}
$ciphertext = mcrypt_generic($td, $plaintext);
echo 'Verschlüsselter Text (hex): ' . bin2hex($ciphertext) . PHP_EOL;
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
// Wichtig · Fallstricke
Deprecation-Hinweis: Die mcrypt-Erweiterung wurde in PHP 7.1 als veraltet markiert und in PHP 7.2 vollständig entfernt. mcrypt_enc_is_block_algorithm() steht in modernen PHP-Versionen nicht mehr zur Verfügung.
Für neue Projekte sollte openssl_encrypt() und openssl_decrypt() oder die sodium_*-Funktionen der Sodium-Erweiterung verwendet werden. Diese bieten moderne, sichere Algorithmen und werden aktiv gepflegt.
Zum Ermitteln der Blockgröße eines Algorithmus kann ergänzend mcrypt_enc_get_block_size() genutzt werden.