(PHP 4 >= 4.0.2, PHP 5, PHP 7 < 7.2.0, PECL mcrypt >= 1.0.0)
mcrypt_module_open — Abre el módulo del algoritmo y del modo a utilizar
Esta función ha sido declarada OBSOLETA a partir de PHP 7.1.0 y será ELIMINADA a partir de PHP 7.2.0. Su uso está totalmente desaconsejado.
$algorithm
,$algorithm_directory
,$mode
,$mode_directory
mcrypt_module_open() abre el módulo del algoritmo
y del modo a utilizar. El nombre del algoritmo se especifica mediante el parámetro
algorithm
(por ejemplo: "twofish"
),
o bien una de las constantes MCRYPT_ciphername
. La biblioteca se cierra
al llamar a mcrypt_module_close().
algorithm
Una de las constantes MCRYPT_nombredelcifrado
, o el nombre del algoritmo como string.
algorithm_directory
El parámetro algorithm_directory
se utiliza
para localizar el módulo de cifrado. Cuando se especifica un
nombre de directorio, se utilizará. Si se especifica una cadena vacía
(""
), se utilizará el valor definido en la directiva
mcrypt.algorithms_dir
del fichero php.ini. Cuando no está definida, el directorio por omisión utilizado
será aquel en el que se encuentre la biblioteca libmcrypt
(habitualmente, /usr/local/lib/libmcrypt).
mode
Una de las constantes MCRYPT_MODE_nombredelmodo
, o una de las siguientes strings: "ecb", "cbc", "cfb", "ofb", "nofb" o "stream".
mode_directory
El parámetro mode_directory
se utiliza para localizar
el módulo de cifrado. Si se especifica un nombre de directorio, se utilizará.
Cuando se especifica una cadena vacía (""
), se utilizará el valor
de la directiva mcrypt.modes_dir
del fichero php.ini.
Si no está definida, el directorio por omisión utilizado
será aquel en el que se encuentre la biblioteca libmcrypt
(habitualmente /usr/local/lib/libmcrypt).
Normalmente, esta función devuelve un descriptor de cifrado, o
false
si ocurre un error.
Ejemplo #1 Ejemplo con mcrypt_module_open()
<?php
$td = mcrypt_module_open(MCRYPT_DES, '',
MCRYPT_MODE_ECB, '/usr/lib/mcrypt-modes');
$td = mcrypt_module_open('rijndael-256', '', 'ofb', '');
?>
La primera línea del ejemplo anterior intentará abrir el cifrado
DES
, en el directorio por omisión, y el modo ECB
en el directorio
/usr/lib/mcrypt-modes. El segundo ejemplo utiliza
las cadenas como nombre para el cifrado y el modo. Esto solo funciona
si la extensión está compilada con libmcrypt 2.4.x o 2.5.x.
Ejemplo #2 Utilización de mcrypt_module_open() para cifrar
<?php
/* Carga un cifrado */
$td = mcrypt_module_open('rijndael-256', '', 'ofb', '');
/* Crea el VI y determina el tamaño de la clave */
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);
$ks = mcrypt_enc_get_key_size($td);
/* Crea la clave (ejemplo únicamente: MD5 no es un buen algoritmo de hash para esto) */
$key = substr(hash('md5', 'very secret key'), 0, $ks);
/* Inicializa el cifrado */
mcrypt_generic_init($td, $key, $iv);
/* Cifra los datos */
$encrypted = mcrypt_generic($td, 'This is very important data');
/* Libera el gestor de cifrado */
mcrypt_generic_deinit($td);
/* Inicializa el módulo de cifrado para el descifrado */
mcrypt_generic_init($td, $key, $iv);
/* Descifra los datos */
$decrypted = mdecrypt_generic($td, $encrypted);
/* Libera el gestor de descifrado y cierra el módulo */
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
/* Muestra la cadena */
echo trim($decrypted)."\n";
?>