Ver Mensaje Individual
  #1 (permalink)  
Antiguo 31/01/2012, 04:55
sirchote
 
Fecha de Ingreso: julio-2010
Mensajes: 116
Antigüedad: 16 años, 3 meses
Puntos: 0
Problema con encriptacion 3des

Saludos. He encontrado el siguiente código buscando por internet cómo encriptar variables para pasarlas a otra url:
Código PHP:
/*
CONFIG
*/
define('IV', '83575023'); // 8 dígitos, los que mas rabia te den
define('KEY_192', '1La4IuYtRe1sin5ReyCDEFGH'); // 24 caracteres, los que mas rabia te den
/*
CONFIG
*/
function hex2bin($hex) {
$rv = '';
foreach(
str_split($hex, 2) as $b) {
$rv .= chr(hexdec($b));
}
return 
$rv;
}
function 
decrypt($key,$iv,$algorithm,$mode,$token) {
$td = mcrypt_module_open($algorithm, '', $mode, '') ;
$iv = substr($iv, 0, mcrypt_enc_get_iv_size($td));
$expected_key_size = mcrypt_enc_get_key_size($td);
$key = substr($key, 0, $expected_key_size);
mcrypt_generic_init($td, $key, $iv);
$response = rtrim(mdecrypt_generic($td, $token), '');
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return 
$response;
}
function 
encrypt($cleartext = ''){
if (!
$cleartext) return NULL;
$cipher = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_ECB, '');
if (
mcrypt_generic_init($cipher, KEY_192, IV) != -1)
{
$cipherText = mcrypt_generic($cipher,$cleartext );
mcrypt_generic_deinit($cipher);
return 
bin2hex($cipherText);
}
} 
Tengo el siguiente problema:

En la página original, donde encripto los datos, encripto el email que quiero enviar, y luego aplico md5 al mismo email para codificarlo, y hacer una prueba de consistencia en la pagina de recepcion de datos:

Código PHP:
$cadena = "[email protected]";
$cadena = encrypt($cadena);
$cadena2 = "[email protected]";
$cadena2 = md5($cadena2);
$cadena2 = encrypt($cadena2);
header ("Location: recepciondatos.php?cadena=$cadena&cadena2=$cadena2"); 
En la pagina recepciondatos.php, tengo el siguiente código:

Código PHP:

$email 
= $_GET['cadena'];
$comparar = $_GET['cadena2'];

$email = hex2bin($email);
$email = decrypt(KEY_192, IV, 'tripledes', 'ecb', $email);

$comparar = hex2bin($comparar);
$comparar = decrypt(KEY_192, IV, 'tripledes', 'ecb', $comparar);

$email2 = md5($email);

if (
$email2 == $comparar)
{
    echo 
"si";
}
else
{
    echo 
"no";
} 
El problema es que nunca detecta que sean iguales.

He probado de asignar a una variable el valor [email protected] y compararlo con los datos de $email, que supuestamente, deberían ser iguales, pero me dice que son distintos.

si muestro $email por pantalla, me da como valor [email protected]

Se debe a algún tipo de variación por la codificación o algo parecido?


Gracias