Signatur
Beschreibung
mcrypt_generic_deinit() schließt die Initialisierung eines Verschlüsselungs-Deskriptors ab, der zuvor mit mcrypt_generic_init() vorbereitet wurde. Die Funktion löscht alle internen Puffer, Schlüsselmaterial und Statusdaten, die das Modul während der Verschlüsselung im Speicher gehalten hat.
Nach dem Aufruf dieser Funktion kann der Deskriptor entweder mit mcrypt_module_close() vollständig freigegeben oder mit einem erneuten mcrypt_generic_init()-Aufruf für eine neue Verschlüsselungsoperation wiederverwendet werden. Es ist wichtig, diese Funktion aufzurufen, bevor das Modul geschlossen wird, da sonst Warnungen ausgegeben werden können.
Achtung: Die gesamte mcrypt-Erweiterung ist seit PHP 7.1.0 als veraltet (deprecated) markiert und wurde in PHP 7.2.0 vollständig aus dem PHP-Kern entfernt. Für neue Projekte sollte stattdessen die openssl-Erweiterung oder die sodium-Erweiterung (libsodium) verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $td Pflicht | resource | Der Verschlüsselungs-Deskriptor (resource), der zuvor mit mcrypt_module_open() geöffnet und mit mcrypt_generic_init() initialisiert wurde. |
Rückgabewert
true zurück, wenn die Deinitialisierung erfolgreich war, andernfalls false (z. B. wenn der Deskriptor nicht korrekt initialisiert war).Beispiele
Vollständiger Verschlüsselungs-/Entschlüsselungs-Zyklus mit korrekter Ressourcenfreigabe
<?php
$key = 'geheimerschluessel123456'; // 24 Bytes für 3DES
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_3DES, MCRYPT_MODE_CBC), MCRYPT_RAND);
$plaintext = 'Geheimer Text';
// Modul öffnen
$td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');
// Initialisieren
mcrypt_generic_init($td, $key, $iv);
// Verschlüsseln
$ciphertext = mcrypt_generic($td, $plaintext);
// Deinitialisieren (bereinigt Schlüssel und Puffer)
mcrypt_generic_deinit($td);
// Für Entschlüsselung neu initialisieren
mcrypt_generic_init($td, $key, $iv);
$decrypted = mdecrypt_generic($td, $ciphertext);
// Erneut deinitialisieren und Modul schließen
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
echo rtrim($decrypted, "\0"); // Padding entfernen
?>
Ressourcenfreigabe ohne Wiederverwendung
<?php
$key = str_repeat('a', 32); // 256-Bit-Schlüssel für AES
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_RAND);
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
mcrypt_generic_init($td, $key, $iv);
$verschluesselt = mcrypt_generic($td, 'Testdaten');
// Deinitalisierung vor dem Schließen des Moduls — immer erforderlich!
$result = mcrypt_generic_deinit($td);
if ($result === false) {
echo 'Deinitialisierung fehlgeschlagen!';
} else {
echo 'Modul erfolgreich deinitialisiert.';
}
mcrypt_module_close($td);
?>
// Wichtig · Fallstricke
Deprecation-Hinweis: Die mcrypt-Erweiterung ist seit PHP 7.1.0 als veraltet markiert (E_DEPRECATED-Warnungen) und wurde in PHP 7.2.0 komplett entfernt. Code, der diese Funktion verwendet, ist nicht mehr kompatibel mit modernen PHP-Versionen.
Sicherheitshinweis: Das Aufrufen von mcrypt_generic_deinit() ist wichtig, um sensibles Schlüsselmaterial aus dem Speicher zu löschen. Wird die Funktion vergessen, kann das Schlüsselmaterial im Prozessspeicher verbleiben. Dennoch bieten moderne Alternativen wie sodium_memzero() aus der sodium-Erweiterung zuverlässigere Garantien für das Löschen sensibler Daten.
Migration: Für neue Projekte sollte openssl_encrypt() / openssl_decrypt() oder die sodium-Erweiterung (z. B. sodium_crypto_secretbox()) verwendet werden, da diese aktiv gepflegt werden und moderne Sicherheitsstandards erfüllen.