Signatur
Beschreibung
mcrypt_module_open() initialisiert ein Verschlüsselungsmodul und gibt ein Handle (eine Ressource) zurück, das für alle nachfolgenden mcrypt-Operationen verwendet wird. Der Algorithmus (z. B. MCRYPT_AES, MCRYPT_BLOWFISH) und der Betriebsmodus (z. B. MCRYPT_MODE_CBC, MCRYPT_MODE_CFB) werden dabei getrennt angegeben, was flexible Kombinationen ermöglicht.
Die Parameter algorithm_directory und mode_directory ermöglichen es, eigene Verzeichnisse für Algorithmus- bzw. Modus-Module anzugeben. Werden leere Zeichenketten übergeben, werden die in der php.ini konfigurierten Standardpfade genutzt.
Das zurückgegebene Ressource-Handle wird anschließend typischerweise mit mcrypt_generic_init() initialisiert, für Ver- oder Entschlüsselung verwendet und danach mit mcrypt_module_close() wieder freigegeben.
Achtung: Die gesamte mcrypt-Erweiterung ist seit PHP 7.1 als deprecated markiert 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 |
|---|---|---|---|
| $algorithm Pflicht | string | Name des Verschlüsselungsalgorithmus, z. B. MCRYPT_AES, MCRYPT_BLOWFISH oder 'rijndael-256'. Es können sowohl Konstanten als auch Zeichenketten verwendet werden. |
|
| $algorithm_directory Pflicht | string | Verzeichnis, in dem die Algorithmus-Module gesucht werden. Bei einer leeren Zeichenkette ('') wird der in der php.ini eingestellte Standardpfad verwendet. |
|
| $mode Pflicht | string | Name des Betriebsmodus, z. B. MCRYPT_MODE_CBC, MCRYPT_MODE_ECB, MCRYPT_MODE_CFB oder 'cbc'. |
|
| $mode_directory Pflicht | string | Verzeichnis, in dem die Modus-Module gesucht werden. Bei einer leeren Zeichenkette ('') wird der in der php.ini eingestellte Standardpfad verwendet. |
Rückgabewert
false zurückgegeben.Beispiele
AES-128-Verschlüsselung im CBC-Modus
<?php
// Algorithmus und Modus öffnen
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
if ($td === false) {
die('Konnte mcrypt-Modul nicht öffnen.');
}
// Schlüssel und IV erzeugen
$key = 'EinGeheimesKey12'; // 16 Bytes für AES-128
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
// Modul initialisieren
mcrypt_generic_init($td, $key, $iv);
// Verschlüsseln
$plaintext = 'Geheimer Text';
$ciphertext = mcrypt_generic($td, $plaintext);
echo 'Verschlüsselt (hex): ' . bin2hex($ciphertext) . PHP_EOL;
// Entschlüsseln
mcrypt_generic_deinit($td);
mcrypt_generic_init($td, $key, $iv);
$decrypted = mdecrypt_generic($td, $ciphertext);
echo 'Entschlüsselt: ' . rtrim($decrypted, "\0") . PHP_EOL;
// Ressource freigeben
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
?>
Infos über geöffnetes Modul abfragen
<?php
$td = mcrypt_module_open('blowfish', '', 'cfb', '');
if ($td !== false) {
echo 'Algorithmus: ' . mcrypt_enc_get_algorithms_name($td) . PHP_EOL;
echo 'Modus: ' . mcrypt_enc_get_modes_name($td) . PHP_EOL;
echo 'Schlüsselgröße: ' . mcrypt_enc_get_key_size($td) . ' Bytes' . PHP_EOL;
echo 'IV-Größe: ' . mcrypt_enc_get_iv_size($td) . ' Bytes' . PHP_EOL;
echo 'Blockgröße: ' . mcrypt_enc_get_block_size($td) . ' Bytes' . PHP_EOL;
mcrypt_module_close($td);
}
?>
// Wichtig · Fallstricke
Deprecation: Die mcrypt-Erweiterung wurde in PHP 7.1 als veraltet markiert (deprecated) und in PHP 7.2 vollständig entfernt. Sie steht in PHP 7.2+ nicht mehr zur Verfügung. Vorhandener Code sollte auf openssl_encrypt() / openssl_decrypt() oder die sodium-Erweiterung (sodium_crypto_secretbox()) migriert werden.
Sicherheit: Der ECB-Modus (MCRYPT_MODE_ECB) ist unsicher und sollte niemals verwendet werden, da er keine semantische Sicherheit bietet. Für CBC ist darauf zu achten, dass ein zufälliger IV pro Verschlüsselungsvorgang erzeugt wird und der Ciphertext mit einem MAC (Message Authentication Code) authentifiziert wird, um Padding-Oracle-Angriffe zu verhindern.
Nach jedem Aufruf von mcrypt_module_open() muss das Handle nach der Verwendung mit mcrypt_module_close() geschlossen werden, um Speicherlecks zu vermeiden.