Encriptar con php usando mcrypt

Primero que nada de debemos instalar esta libreria en php, yo utilizo WAMP donde con un solo click lo podemos hacer pero en caso de que sea manualmente debemos ir al php ini y cambiar lo siguiente:
;extension=php_mcrypt.dll
;extension=php_mcrypt_filter.dll
a
extension=php_mcrypt.dll
extension=php_mcrypt_filter.dll
Importante Asegurarnos que en la ruta de extensions_dir esté el directorio donde están estas dos librerias.
Anteriormente se utilizaban las funciones mcrypt_ecb, etc. Pero estas están en desuso y suelen dar errores del tipo:


  • Warning: mcrypt_ecb(): Attempt to use an empty IV, which is NOT recommend in (url)

  • PHP Warning: mcrypt_ecb(): Size of key is too large for this algorithm in



El primero indica que no hemos puesto el valor del vector de inicialización pero este valor no está pasado a la función. En el manual de php los parámetros de la función son los siguientes:
String mcrypt_ecb ( int $cipher, string $key, string $data, int $mode )
Aunque hay algunos blogs que ponen que la estructura es la siguiente:

string mcrypt_ecb ( string $cipher, string $key, string $data, int $mode [, string $iv] )

De ahí puede ser el error de que no encuentra el vector de inicialización.

El segundo error se debe a que la función está en desuso y no admite claves de codificación muy extensas. Por ello no debemos utilizar esta función para codificar sino una mezcla de estas funciones, las cuales explicaré en otro artículo sobre codificar sessiones.


$cc = 'my secret text';
$key = 'my secret key';
$iv = '12345678';
$cipher = mcrypt_module_open(MCRYPT_BLOWFISH,'','cbc','');
mcrypt_generic_init($cipher, $key, $iv);
$encrypted = mcrypt_generic($cipher,$cc);
mcrypt_generic_deinit($cipher);
mcrypt_generic_init($cipher, $key, $iv);
$decrypted = mdecrypt_generic($cipher,$encrypted);
mcrypt_generic_deinit($cipher);
echo "encrypted : ".$encrypted;
echo "decrypted : ".$decrypted;

Comentarios