Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema con encriptado

Estas en el tema de Problema con encriptado en el foro de PHP en Foros del Web. Hola amigos buenas tardes. Tengo un problema con el siguiente metodo de encriptado que uso para aplicarlo a los correos electronicos Código PHP: class  escondido  ...
  #1 (permalink)  
Antiguo 12/07/2013, 17:09
 
Fecha de Ingreso: septiembre-2007
Mensajes: 120
Antigüedad: 17 años, 2 meses
Puntos: 0
Problema con encriptado

Hola amigos buenas tardes. Tengo un problema con el siguiente metodo de encriptado que uso para aplicarlo a los correos electronicos

Código PHP:
class escondido {
    private static 
$indicador "miclave";
    public static function 
encri ($input) {
        
$output base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256md5(escondido::$indicador), $inputMCRYPT_MODE_ECBmd5(md5(escondido::$indicador))));
        return 
$output;
    }
    public static function 
desencri ($input) {
        
$output rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256md5(escondido::$indicador), base64_decode($input), MCRYPT_MODE_ECBmd5(md5(escondido::$indicador))), "\0");
        return 
$output;
    }

al momento de ingresar un correo que tenga mas de 32 caracteres me da una cadena sumamente larga.

Por ejemplo si uso el siguiente texto "[email protected]" me da esta cadena de texto: hu/Se3oKLK/LqHs8qIrGD1tHMg6k4iP9TvZ4AhE/JHQ=

A diferencia de que si le agrego una letra mas "[email protected]" me entrega esta cadena exageradamente larga y que me complica un esquema de validacion: 5mF1N8fG3oJ8yh95vOkJMrcZnyszqPBR3sX20CsWqoaEGaSU3J PjhJmIzNMMqYYkM0pHGS7K3GotR0kSIuD9xQ==

El proceso de validacion que aplico es el siguiente:
Código PHP:
$email trim($_GET['email']);
$desencri escondido::desencri($email);
$Ok ereg("^([a-zA-Z0-9_\.-]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"$desencri);
    if (
$Ok) {
        
//mail($adminemail,'Subscribe','','From: '.$email);
        
Header("Location: $valido");
        
$sql2"INSERT INTO emails (email,category) VALUES ('$desencri','1')";
        
mysql_query($sql2);
    }else{
    
Header("Location: $invalido");

con el primer ejemplo hasta 32 caracteres no tengo ningun problema, pero si alguna cadena de texto o correo supera este valor ya me entrega un error. Alguien tiene alguna idea de como podria mejorar este proceso para evitar ese problema??.

Gracias y feliz fin de semana
  #2 (permalink)  
Antiguo 12/07/2013, 17:32
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Problema con encriptado

Me la juego que la pista esta en la constante MCRYPT_RIJNDAEL_256, pues 32 * 8 bits = 256, o se hace referencia a cierto limite

O sea... puedes codificar hasta 256 bits
__________________
Salu2!
  #3 (permalink)  
Antiguo 12/07/2013, 17:43
 
Fecha de Ingreso: septiembre-2007
Mensajes: 120
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Problema con encriptado

Gracias italico, entonces que metodo podria usar??
  #4 (permalink)  
Antiguo 12/07/2013, 20:37
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Problema con encriptado

Me canse de adivinar... leyendo el manual, tu elegistes un tamaño de bloque de 256 bits pero...

Cita:
data
Los datos que serán cifrados con el cifrador y modo dados a través de cipher y mode. Si el tamaño de la información no es n * blocksize, ésta será rellenada con '\0'.
O sea.. elije entonces un tamaño de bloque menor... pues siempre te rellenara con ceros cualquier bloque incompleto !

Por lo anterior ...

Cita:
El texto cifrado devuelto puede ser mayor al tamaño de datos que fue especificado por el parámetro data.
http://www.php.net/manual/es/functio...pt-encrypt.php
__________________
Salu2!
  #5 (permalink)  
Antiguo 15/07/2013, 09:51
 
Fecha de Ingreso: septiembre-2007
Mensajes: 120
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Problema con encriptado

Nuevamente gracias italico. Precisamente el viernes entre lectura y lectura encontre una forma para ampliar mi cadena de caracteres a codificar, por lo que deje el codigo de esta manera

Código PHP:
class escondido {
    private static 
$indicador "miclave";
    public static function 
encri ($input) {
        
$output base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256md5(escondido::$indicador), $inputMCRYPT_MODE_CFBmd5(md5(escondido::$indicador))));
        return 
$output;
    }
    public static function 
desencri ($input) {
        
$output rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256md5(escondido::$indicador), base64_decode($input), MCRYPT_MODE_CFBmd5(md5(escondido::$indicador))), "\0");
        return 
$output;
    }

Ya que encontre en el manual de encriptado que la codificacion CFB en la linea MCRYPT_MODE_ me entrega mayor seguridad y amplia el rango para mi cadena de caracteres.

http://us.php.net/manual/en/mcrypt.constants.php

Gracias y saludos.

Etiquetas: encriptacion, validacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:08.