Filtros de Encripción

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ámetros del filtro mcrypt
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

Ejemplo #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_secretatrue), 08);
$llave substr(md5('contrasenya1'.$frase_secretatrue) .
               
md5('contrasenya2'.$frase_secretatrue), 024);
$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);
?>

Ejemplo #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_secretatrue), 08);
$llave substr(md5('contrasenya1'.$frase_secretatrue) .
               
md5('contrasenya2'.$frase_secretatrue), 024);
$opciones = array('iv'=>$iv'key'=>$llave);

$da fopen('archivo-secreto.enc''rb');
stream_filter_append($fp'mdecrypt.tripledes'STREAM_FILTER_READ$opciones);
$datos rtrim(stream_get_contents($da));
fclose($da);

echo 
$datos;
?>
add a note add a note

User Contributed Notes 1 note

up
1
Uwe Ohse
2 months ago
1) The mcrypt module has been deprecated with PHP 7.1.
What does that mean for the encryption filters?

2) deriving the IV from the secret passphrase seems wrong. This leaks information about the passphrase without need.

3) using md5() for this? Really? hash() has been available since PHP 5.1.2.

4) hashing the passphrase twice does not add any security.

5) using substr() on binary data (why, oh why, is true passed to md5()?) might lead to headaches if mbstring.func_overload is used.
To Top