Start · Sprachen · PHP · Referenz · mcrypt_enc_is_block_algorithm

mcrypt_enc_is_block_algorithm

Funktion

Prüft, ob der Algorithmus des geöffneten Verschlüsselungs-Deskriptors ein Blockalgorithmus (im Gegensatz zu einem Stromalgorithmus) ist.

seit PHP 4.0.2 Kategorie: crypto

Signatur

mcrypt_enc_is_block_algorithm(resource $td): bool

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

Typ
bool
Beschreibung
Gibt 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);
Rijndael-128 ist ein Blockalgorithmus. Blockgröße: 16 Byte

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);
Padding angewendet, neue Länge: 16 Byte Verschlüsselter Text (hex): ...

// 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.