Start · Sprachen · PHP · Referenz · mcrypt_module_close

mcrypt_module_close

Funktion

Schließt ein geöffnetes mcrypt-Modul und gibt die damit verbundenen Ressourcen frei.

seit PHP 4.0.2 Kategorie: crypto

Signatur

mcrypt_module_close(resource $td): bool

Beschreibung

mcrypt_module_close() schließt einen zuvor mit mcrypt_module_open() geöffneten Verschlüsselungs-Deskriptor und gibt alle damit verbundenen Speicher-Ressourcen wieder frei. Die Funktion sollte immer aufgerufen werden, sobald ein Verschlüsselungsvorgang abgeschlossen ist, um Speicherlecks zu vermeiden.

Der typische Arbeitsablauf mit den mcrypt-Funktionen sieht so aus: Modul öffnen mit mcrypt_module_open(), Verschlüsselung initialisieren mit mcrypt_generic_init(), Daten ver- oder entschlüsseln, Ressourcen mit mcrypt_generic_deinit() freigeben und schließlich das Modul mit mcrypt_module_close() schließen.

Wichtiger Hinweis zur Deprecation: Die gesamte mcrypt-Erweiterung wurde mit PHP 7.1.0 als veraltet markiert (deprecated) und mit PHP 7.2.0 vollständig entfernt. Für neue Projekte sollte stattdessen die openssl-Erweiterung oder die sodium-Erweiterung (ab PHP 7.2) 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

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, oder false bei einem Fehler.

Beispiele

Vollständiger Verschlüsselungszyklus mit mcrypt_module_close

<?php
// Modul öffnen
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');

// Schlüssel und IV erzeugen
$key = substr(hash('sha256', 'geheimesPasswort', true), 0, 16);
$iv  = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_URANDOM);

// Verschlüsselung initialisieren
mcrypt_generic_init($td, $key, $iv);

// Daten verschlüsseln
$plaintext  = 'Geheimer Text';
$ciphertext = mcrypt_generic($td, $plaintext);

// Ressourcen der Initialisierung freigeben
mcrypt_generic_deinit($td);

// Modul schließen
mcrypt_module_close($td);

echo 'Verschlüsselung abgeschlossen. Länge des Ciphertexts: ' . strlen($ciphertext) . ' Bytes.' . PHP_EOL;
Verschlüsselung abgeschlossen. Länge des Ciphertexts: 16 Bytes.

Moderne Alternative mit OpenSSL (empfohlen ab PHP 7.2+)

<?php
// Empfohlene Alternative zu mcrypt mit openssl_encrypt
$key        = openssl_random_pseudo_bytes(32);
$iv         = openssl_random_pseudo_bytes(openssl_cipher_iv_length('AES-256-CBC'));
$plaintext  = 'Geheimer Text';

$ciphertext = openssl_encrypt($plaintext, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);

echo 'Verschlüsselt mit OpenSSL. Länge: ' . strlen($ciphertext) . ' Bytes.' . PHP_EOL;

// Entschlüsseln
$decrypted = openssl_decrypt($ciphertext, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
echo 'Entschlüsselt: ' . $decrypted . PHP_EOL;
Verschlüsselt mit OpenSSL. Länge: 16 Bytes. Entschlüsselt: Geheimer Text

// Wichtig · Fallstricke

Deprecation: Die mcrypt-Erweiterung wurde in PHP 7.1.0 als veraltet markiert und in PHP 7.2.0 vollständig entfernt. Code, der mcrypt_module_close() verwendet, ist daher nicht mehr kompatibel mit PHP 7.2 und neuer.

Reihenfolge beachten: mcrypt_module_close() darf erst aufgerufen werden, nachdem mcrypt_generic_deinit() die Initialisierungs-Ressourcen freigegeben hat. Eine falsche Reihenfolge kann zu Fehlern oder Speicherlecks führen.

Sicherheitshinweis: Die mcrypt-Bibliothek (libmcrypt) wurde seit 2007 nicht mehr aktiv gepflegt. Es wird dringend empfohlen, auf openssl_encrypt()/openssl_decrypt() oder die sodium_crypto_*-Funktionen umzusteigen, die moderne und sichere Algorithmen implementieren.