Foros del Web » Programando para Internet » PHP »

Problema de caracteres en cifrado/descifrado de datos

Estas en el tema de Problema de caracteres en cifrado/descifrado de datos en el foro de PHP en Foros del Web. Hola, cree una pequeña clase que cifra/descifra datos utilizando el algoritmo "Rijndael" con claves de 256 bits. Aca un extracto del metodo para encriptar: Código ...
  #1 (permalink)  
Antiguo 11/09/2008, 13:59
Avatar de chitoso  
Fecha de Ingreso: mayo-2008
Ubicación: Montevideo, Uruguay
Mensajes: 205
Antigüedad: 15 años, 11 meses
Puntos: 5
Problema de caracteres en cifrado/descifrado de datos

Hola, cree una pequeña clase que cifra/descifra datos utilizando el algoritmo "Rijndael" con claves de 256 bits.

Aca un extracto del metodo para encriptar:

Código PHP:
static public function Encrypt($pass) {
            
$iv_size mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256MCRYPT_MODE_ECB); //get vector size on ECB mode
            
$iv mcrypt_create_iv($iv_sizeMCRYPT_RAND); //Creating the vector
            
$cryptedpass mcrypt_encrypt (MCRYPT_RIJNDAEL_256self::$encryptionKey$passMCRYPT_MODE_ECB$iv); //Encrypting using MCRYPT_RIJNDAEL_256 algorithm
            
return $cryptedpass;
        } 
En mi aplicación donde lo uso todo funciona perfecto. los datos van y vienen y se codifican/decodifican a la perfección.

Ahora cree una página aparte para poder ingresar un dato cifrado en un textbox y que me diga el string original. Es decir, consulto la base de datos, copio el dato cifrado y obtengo el original.

Lo único que hace es tener un textbox que captura la información y la codifica/decodifica:

Código PHP:
//Descifrando //
            
if(isset($_POST['descifrar'])){
                
$output Security::Decrypt($text);
                echo 
$output;
            } 
Cuando codifico la información, coincide con lo que veo en la base de datos, donde esta toda la información cifrada. Pero cuando copio de la base y trato de descifrar, no da bien. Tira caracteres como p�<�,m�כ�gjF�$���ɷ��, que obviamente no coinciden con el string original.

Me imagino que tiene que ver con la codificación del form y la pagina, pero he probado todo y no lo puedo hacer coincidir. Estoy usando utf-8 en la base y en las páginas.
__________________
Pasión por la Música
  #2 (permalink)  
Antiguo 11/09/2008, 14:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problema de caracteres en cifrado/descifrado de datos

Hola chitoso,

Es probable que tu algoritmo para desencryptar no sea el correcto, ya que en teoria se deberia de imprimir tal cual el texto segun lo agregaste en tu BD.

Saludos.
  #3 (permalink)  
Antiguo 11/09/2008, 14:53
Avatar de chitoso  
Fecha de Ingreso: mayo-2008
Ubicación: Montevideo, Uruguay
Mensajes: 205
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: Problema de caracteres en cifrado/descifrado de datos

El algoritmo para desencriptar está actualmente en uso en mi aplicación, y los datos se decodifican perfectamente. Por eso descarté ese problema de arranque.

Es decir, en mi aplicación, no se ingresan por pantalla para desencriptar, se hace todo por php. Funciona así:
El texto cifrado se toma de la base de datos, se aplica la funcion inversa y luego se muestra. Funciona a la perfección!

El tema es cuando uno lo ingresa y se hace el POST...
__________________
Pasión por la Música
  #4 (permalink)  
Antiguo 11/09/2008, 21:46
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problema de caracteres en cifrado/descifrado de datos

No entiendo lo que quieres decir, dices que cuando lo ingresas funciona pero que cuando es por POST no...

Como lo ingresas la primera vez?

Saludos.
  #5 (permalink)  
Antiguo 12/09/2008, 06:44
Avatar de chitoso  
Fecha de Ingreso: mayo-2008
Ubicación: Montevideo, Uruguay
Mensajes: 205
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: Problema de caracteres en cifrado/descifrado de datos

Si, me pareció que no se entendió mucho... es así. En la base de datos se almacenan los códigos CIFRADOS. El ingreso es así

El usuario se loguea en el sistema, ingresa el código, que en general es numérico o a lo sumo alfanumerico, del estilo "88899947466k", por ejemplo. Ese código se cifra (con la función Encrypt()) en el servidor y se guarda en la base de datos.

Luego, el usuario puede verlos por pantalla en una lista. El proceso es inverso. Se hace una consulta a BD, se les aplica Decrypt() y se hace "echo".

Y ahí está la diferencia, en este caso, los datos se obtienen directo de la base de datos y se descifran. Si voy al phpmyadmin, copio el dato cifrado y utilizo la misma funcion decrypt() para descifrarlo, no funciona.

Espero que se haya entendido, comprendo que no haya respuestas porque ya se fue para largo y es un problema muy engorroso...
__________________
Pasión por la Música
  #6 (permalink)  
Antiguo 12/09/2008, 09:42
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problema de caracteres en cifrado/descifrado de datos

Sigo sin entender bien tu proceso, como lo guardas en la BD?, según lo que he leido en la BD lo tienes que almacenar como BLOB en binario de lo contrario tendrias errores, asi que el problema sea ese, que a la hora de copiar el BLOB desde la BD a la hora de copiar no copias todos los caracteres (hay caracteres invisibles). Por lo que la cadena es diferente.

Si te es necesario hacer proceso asi como dices (copiar / pegar), lo mejor entonces es guardar el dato con base64encode / encrypt en la BD en un campo de texto y aplicar posteriormente base64decode y luego el decrypt.

Saludos.
  #7 (permalink)  
Antiguo 12/09/2008, 09:52
Avatar de chitoso  
Fecha de Ingreso: mayo-2008
Ubicación: Montevideo, Uruguay
Mensajes: 205
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: Problema de caracteres en cifrado/descifrado de datos

Claro, parte del problema es que al copiar, como los símbolos se ven como '????' yo no estoy seguro si los está interpretando bien.

Creo que hacer base64encode despues de cifrar y base64decode luego de descifrar puede resolver el problema de los caracteres...

Lo pruebo y vuelvo a contar como me fue. De paso publico la clase si hay interesados.

Gracias GatorV, enorme tu paciencia!
__________________
Pasión por la Música
  #8 (permalink)  
Antiguo 12/09/2008, 10:41
Avatar de chitoso  
Fecha de Ingreso: mayo-2008
Ubicación: Montevideo, Uruguay
Mensajes: 205
Antigüedad: 15 años, 11 meses
Puntos: 5
Desacuerdo Respuesta: Problema de caracteres en cifrado/descifrado de datos

Lamentablemente no funcionó...

Copio todo el código y explico:

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head profile="http://www.w3.org/2005/10/profile">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <title>Crypto Check</title>
        <link href="css/style.css" rel="stylesheet" type="text/css" />
</head>
    <body>
        <?php
            
require_once('classes/Security.php');
            
            if(isset(
$_POST['plaintext'])){
                
$text $_POST['plaintext'];
            }
            else{
                
$text '';
            }
            
            
// Cifrando //
            
if(isset($_POST['cifrar'])){
                
                
$output Security::Encrypt($text);
                
$output utf8_encode($output);
                
$b64 utf8_decode($output); //Para chequear si el base64decode coincide
            
}
            
            
// Descifrando //
            
if(isset($_POST['descifrar'])){
                
                
$b64 base64_decode($text);
                
$output Security::Decrypt($b64);
                
            }
            
        
?>
        <form action="index.php" method="post" charset="utf-8">
        <input type="text" name="plaintext" value="" maxlength="29" size="29"/>
        <input type="submit" name="cifrar" value="Cifrar" />
        <input type="submit" name = "descifrar" value="Descifrar" />
        </form>
        <br/>
        <?php echo "base64decode: <h2>" $b64"</h2>"?>
        <?php echo "Resultado: <h2>" $output"</h2>"?>
        
    </body>
</html>
Al cifrar:

Ingreso: 'nacho'
El resultado de codificar->encriptar es ‹äç®v˜-•Ñ¥EùA¡íV°IJº—Ú7Š4
No exactamente lo que me esperaba... Porque al copiar eso estoy en el mismo caso que antes, no descifra bien. Ni siquiera hace la codificación bien...

Alguna idea? Estoy haciendo algo mal?
__________________
Pasión por la Música
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 02:04.