mcrypt.* y mdecrypt.* ofrecen encripción y desencripción simétrica usando libmcrypt. Ambos conjuntos de filtros soportan los mismos algoritmos disponibles a la extensión mcrypt en la forma de mcrypt.ciphername, en donde ciphername es el nombre del cifrado que debe ser pasado a mcrypt_module_open(). Los siguientes cinco parámetros se encuentran disponibles también:
Parámetro | ¿Requerido? | Predeterminado | Ejemplos |
---|---|---|---|
mode | Opcional | cbc | cbc, cfb, ecb, nofb, ofb, stream |
algorithms_dir | Opcional | ini_get('mcrypt.algorithms_dir') | Ubicación de los módulos de los algoritmos |
modes_dir | Opcional | ini_get('mcrypt.modes_dir') | Ubicación de los módulos de los modos |
iv | Requerido | N/A | Usualmente 8, 16, o 32 bytes de datos binarios. Depende del cifrado |
key | Requerido | N/A | Usualmente 8, 16, o 32 bytes de datos binarios. Depende del cifrado |
Example#1 Encripción de la salida usando 3DES
<?php
$frase_secreta = 'Mi secreto';
/* Convertir una frase legible en una pareja iv/llave reproducible
*/
$iv = substr(md5('iv'.$frase_secreta, true), 0, 8);
$llave = substr(md5('contrasenya1'.$frase_secreta, true) .
md5('contrasenya2'.$frase_secreta, true), 0, 24);
$opciones = array('iv'=>$iv, 'key'=>$key);
$da = fopen('archivo-secreto.enc', 'wb');
stream_filter_append($da, 'mcrypt.tripledes', STREAM_FILTER_WRITE, $opciones);
fwrite($da, 'Datos muy muy muy secretos');
fclose($da);
?>
Example#2 Lectura de un archivo encriptado
<?php
$frase_secreta = 'Mi secreto';
/* Convertir una frase legible en una pareja iv/llave reproducible
*/
$iv = substr(md5('iv'.$frase_secreta, true), 0, 8);
$llave = substr(md5('contrasenya1'.$frase_secreta, true) .
md5('contrasenya2'.$frase_secreta, true), 0, 24);
$opciones = array('iv'=>$iv, 'key'=>$llave);
$da = fopen('archivo-secreto.enc', 'rb');
stream_filter_append($da, 'mdecrypt.tripledes', STREAM_FILTER_WRITE, $opciones);
$datos = rtrim(stream_get_contents($da));
fclose($da);
echo $datos;
?>