(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 el modo a ser utilizados
Esta función ha sido declarada OBSOLETA a partir de PHP 7.1.0. Su uso está totalmente desaconsejado.
$algorithm
, string $algorithm_directory
, string $mode
, string $mode_directory
) : resource
Esta función abre el módulo del algoritmo y el modo a ser utilizados.
El nombre del algoritmo es especificado en algorithm, por ejemplo "twofish" o
una de las constantes MCRYPT_ciphername
. El módulo es cerrado al invocar 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
ubicar el módulo de encriptación. Cuando se pasa un nombre de directorio,
es utilizado. Cuando se pasa una cadena vacía (""), se
utiliza el valor configurado en la directiva mcrypt.algorithms_dir
del fichero php.ini. Cuando no se pasa nada, el directorio por defecto
que se utiliza es en el que libmcrypt fue compilado (generalmente /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
ubicar el módulo de encriptación. Cuando se pasa un nombre de directorio,
es utilizado. Cuando se pasa una cadena vacía (""), se
utiliza el valor configurado en la directiva mcrypt.modes_dir
del fichero php.ini. Cuando no se pasa nada, el directorio por defecto
que se utiliza es en el que libmcrypt fue compilado (generalmente /usr/local/lib/libmcrypt).
Normalmente devuelve un descriptor de cifrado, o FALSE
en caso de error.
Ejemplo #1 Ejemplo de 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 primer línea del ejemplo anterior intentará abrir el cifrador DES desde el directorio por defecto y el modo ECB desde el directorio /usr/lib/mcrypt-modes. El segundo ejemplo utiliza cadenas como nombres para el cifrador y el modo, esto solo funciona cuando la extensión está enlazado con libmcrypt 2.4.x o 2.5.x.
Ejemplo #2 Utilizando mcrypt_module_open() en el proceso de cifrado
<?php
/* Open the cipher */
$td = mcrypt_module_open('rijndael-256', '', 'ofb', '');
/* Create the IV and determine the keysize length, use MCRYPT_RAND
* on Windows instead */
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);
$ks = mcrypt_enc_get_key_size($td);
/* Create key */
$key = substr(md5('very secret key'), 0, $ks);
/* Intialize encryption */
mcrypt_generic_init($td, $key, $iv);
/* Encrypt data */
$encrypted = mcrypt_generic($td, 'This is very important data');
/* Terminate encryption handler */
mcrypt_generic_deinit($td);
/* Initialize encryption module for decryption */
mcrypt_generic_init($td, $key, $iv);
/* Decrypt encrypted string */
$decrypted = mdecrypt_generic($td, $encrypted);
/* Terminate decryption handle and close module */
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
/* Show string */
echo trim($decrypted) . "\n";
?>