Start · Sprachen · PHP · Referenz · mcrypt_module_open

mcrypt_module_open

Funktion

Öffnet ein mcrypt-Modul für den angegebenen Verschlüsselungsalgorithmus und Betriebsmodus und gibt eine Ressource zurück.

seit PHP 4.0.2 Kategorie: crypto

Signatur

mcrypt_module_open(string $algorithm, string $algorithm_directory, string $mode, string $mode_directory): resource|false

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

Typ
resource|false
Beschreibung
Gibt im Erfolgsfall eine mcrypt-Ressource zurück, die für nachfolgende mcrypt-Funktionen benötigt wird. Im Fehlerfall (z. B. unbekannter Algorithmus oder Modus) wird 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);
?>
Verschlüsselt (hex): <hex-string> Entschlüsselt: Geheimer Text

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);
}
?>
Algorithmus: BLOWFISH Modus: CFB Schlüsselgröße: 56 Bytes IV-Größe: 8 Bytes Blockgröße: 8 Bytes

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