Foros del Web » Programando para Internet » PHP »

Collation de tablas MySQL y PHP

Estas en el tema de Collation de tablas MySQL y PHP en el foro de PHP en Foros del Web. Buen dia a todos: Tengo dos funciones para encriptar/desencriptar valores los cuales posteriormente seran guardados en una tabla de la BD. La funcion en cuestion ...
  #1 (permalink)  
Antiguo 24/05/2011, 06:28
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 140
Antigüedad: 13 años, 1 mes
Puntos: 1
Collation de tablas MySQL y PHP

Buen dia a todos:
Tengo dos funciones para encriptar/desencriptar valores los cuales posteriormente seran guardados en una tabla de la BD. La funcion en cuestion es esta:
Código PHP:
   public function encriptar($cadena$clave "una clave secreta") {
      
$cifrado MCRYPT_RIJNDAEL_256;
      
$modo MCRYPT_MODE_ECB;
      return 
mcrypt_encrypt($cifrado$clave$cadena$modomcrypt_create_iv(mcrypt_get_iv_size($cifrado$modo), MCRYPT_RAND)
      );
   }

   public function 
desencriptar($cadena$clave "una clave secreta") {
      
$cifrado MCRYPT_RIJNDAEL_256;
      
$modo MCRYPT_MODE_ECB;
      return 
mcrypt_decrypt($cifrado$clave$cadena$modomcrypt_create_iv(mcrypt_get_iv_size($cifrado$modo), MCRYPT_RAND)
      );
   } 
La llamada a la misma la estoy haciendo de la siguiente forma:
Código PHP:
$this->encriptar("admin""dHnrCX2DLYQa3v7T4TBwmQRVoTgzMSik"); 
Antes de guardar los valores en la BD hago un SET COLLATION tal como sigue:
Código PHP:
$this->db->query("SET collation_connection = latin1_spanish_ci"); 
Pero aun asi a la BD me esta llegando pura cascara, algo como esto "???m??1?X?'?9??" que nada tiene que ver con la encriptacion antes hecha, alguna ayuda?

Saludos y dsd ya gracias
  #2 (permalink)  
Antiguo 24/05/2011, 08:27
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Collation de tablas MySQL y PHP

¿Y como sabes que no tiene nada que ver con la encriptación hecha?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 24/05/2011, 08:37
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 140
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: Collation de tablas MySQL y PHP

Pues porque lo primero que hago es insertar los valores en la BD usando la misma funcion de encriptacion por lo cual a la hora de comparar los valores en un SELECT con WHERE los valores no son los mismos. En pasos logicos:
  1. Inserto en la BD "admin" usando la funcion "encriptar"
  2. Creo un formulario y pongo como palabra "admin" y lo encripto con la misma funcion "encriptar"
  3. Cuando intento hacer un SELECT con WHERE donde este toma el valor encriptado de "admin" antes mencionado la BD no me retorna resultados
  #4 (permalink)  
Antiguo 24/05/2011, 08:42
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Collation de tablas MySQL y PHP

A ver, supongo que todo lo haces bien pero, ¿podrías mostrar mas información?

Por ejemplo, has un SELECT a la BD para comprobar cual es el valor que realmente existe en la BD, e imprime el valor que produce tu función de encriptación que se supone debería producir el mismo resultado.

Es ambiguo lo que mencionas, a menos que cambies la clave, o bien, el tipo de columna para almacenar no sea el correcto es casi imposible saber que te sucede por lo que dices.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 24/05/2011, 09:01
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 140
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: Collation de tablas MySQL y PHP

A que te refieres con mostrar mas informacion? Probe lo que me decis y mira el resultado:
Código:
BD: Ic˜i6Ò¹˜ñ’ ÔÚ¯ÉÍõ%¾7šëM¼
Enc: Ic˜i6Ò¹˜ñ’ ÔÚ¯ÉÍõ%¾7šëM¼
Este es el codigo que use para realizar dicha funcion:
Código PHP:
 $enc = new EncryptDecrypt();
 
$query $this->db->query("SELECT * FROM usuarios WHERE id=14");
 
$row $query->row();
 echo 
'BD:'$row->usuario .'<br/>';
 echo 
'Enc:'$enc->encriptar("admin"$this->config->item('encryption_key')); 
Ahh estoy usando CodeIgniter por eso ves los $this->db->query y cosas afines
  #6 (permalink)  
Antiguo 24/05/2011, 09:14
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Collation de tablas MySQL y PHP

Entiendo, todo es muy extraño.

Vamos a hacer lo siguiente para descartar un problema en la BD, extrae la columna que previamente encriptaste y desencriptala para mostrar su valor original.

¿Todo en orden?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 24/05/2011, 09:39
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 140
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: Collation de tablas MySQL y PHP

Pues no . Algo extraño hay aqui y no logro verlo. Explico un poco mejor para ver si logras entender un poco mejor. Para insertar en la BD use este codigo:
Código PHP:
$enc = new EncryptDecrypt();
$user $enc->encriptar("admin""dHnrCX2DLYQa3v7T4TBwmQRVoTgzMSik");
$pass $enc->encriptar("12345""dHnrCX2DLYQa3v7T4TBwmQRVoTgzMSik");

// Hago un utf8_encode para que los valores se almacenen bien en la BD
$data = array('usuario' => utf8_encode($user), 'pass' => utf8_encode($pass));
      
$this->db->insert('usuarios'$data); 
Entonces ahora q estamos realizando pruebas para poder mostrar el valor bien debo hacerle un utf8_decode y luego desencriptarlo o sea como sigue:
Código PHP:
$enc = new EncryptDecrypt();
      
$query $this->db->query("SELECT * FROM usuarios WHERE id=14");
      
$row $query->row();
      echo 
'BD:'utf8_decode($row->usuario).'<br/>';
      echo 
'Desenc:'$enc->desencriptar(utf8_decode($row->usuario), "dHnrCX2DLYQa3v7T4TBwmQRVoTgzMSik").'<br/>';
      echo 
'Enc:'$enc->encriptar("admin""dHnrCX2DLYQa3v7T4TBwmQRVoTgzMSik"); 
y mira el resultado:
Código:
BD:Ic˜i6Ò¹˜ñ’ ÔÚ¯ÉÍõ%¾7šëM¼
Desenc:admin
Enc:Ic˜i6Ò¹˜ñ’ ÔÚ¯ÉÍõ%¾7šëM¼
Asi q no se porque esta fallando lo de la consulta a la BD
  #8 (permalink)  
Antiguo 24/05/2011, 09:48
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Collation de tablas MySQL y PHP

Bingo!

Eso último que dices, ¿porque estará fallando la consulta a la BD?

Bueno... pues muestra como haces la consulta, si no es imposible saber que sucede.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 24/05/2011, 09:59
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 140
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: Collation de tablas MySQL y PHP

Pues aqui esta:
Código PHP:
$enc = new EncryptDecrypt();

      
$user $enc->encriptar($_POST['username'], $this->config->item('encryption_key'));
      
$pass $enc->encriptar($_POST['password'], $this->config->item('encryption_key'));

      
$cond = array(
          
'usuario' => utf8_encode($user),
          
'pass' => utf8_encode($pass)
      );

      
$query $this->db->get_where('usuarios'$cond);

      if (
$query->num_rows() != 0) {
         
$row $query->row();
         
$session_data = array(
             
"id" => $row->id,
             
"usuario" => $row->usuario,
             
"logged_in" => TRUE
         
);
         
$this->session->set_userdata($session_data); 
Recuerda que uso CodeIgniter
  #10 (permalink)  
Antiguo 24/05/2011, 10:08
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Collation de tablas MySQL y PHP

Sabes, imagino que los problemas los tienes al momento de usar UTF-8, y sobre todo porque cambias el conjunto de caracteres de la BD a latín.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 24/05/2011, 10:15
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 140
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: Collation de tablas MySQL y PHP

No eso del latin lo elimine por eso es q no se donde falla
  #12 (permalink)  
Antiguo 24/05/2011, 10:21
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Collation de tablas MySQL y PHP

Pero ya cambiaste a UTF-8 ?
Cita:
SET NAMES 'utf-8'
O quizá intenta eliminando todo lo que tenga que ver con UTF-8 en tu código.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #13 (permalink)  
Antiguo 24/05/2011, 10:24
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 140
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: Collation de tablas MySQL y PHP

Como asi? No entiendo a q te refieres con "eliminando todo lo q tenga ver con UTF-8 en tu codigo"
  #14 (permalink)  
Antiguo 24/05/2011, 10:31
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Collation de tablas MySQL y PHP

Me refiero a las funciones de conversión de UTF-8 que tienes en tu código, quizá eso entorpezca sin saber los verdaderos valores de la consulta.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #15 (permalink)  
Antiguo 25/05/2011, 13:31
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 140
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: Collation de tablas MySQL y PHP

Bueno he intentado ejecutar la consulta SET NAMES 'utf-8' y me retorna este error:
Código:
Error Number: 1115
Unknown character set: 'utf-8'
Alguna idea de como solucionarlo?
  #16 (permalink)  
Antiguo 25/05/2011, 13:31
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 140
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: Collation de tablas MySQL y PHP

Mi error es utf8 no utf-8
  #17 (permalink)  
Antiguo 25/05/2011, 13:32
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Collation de tablas MySQL y PHP

Creo que la sintaxis era:
Cita:
SET NAMES 'utf8'
Disculpa por el error.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #18 (permalink)  
Antiguo 25/05/2011, 13:37
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 140
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: Collation de tablas MySQL y PHP

Bueno ya he solucionado el problema el tema es que en mi reguero de codigo algo tenia mal. He revisado todo nuevamente de arriba a abajo y ha quedado algo asi:
Código PHP:
$enc = new EncryptDecrypt();

$user $enc->encriptar($_POST['username'], $this->config->item('encryption_key'));
$pass $enc->encriptar($_POST['password'], $this->config->item('encryption_key'));

$cond = array(
          
'usuario' => utf8_encode($user),
          
'pass' => utf8_encode($pass)
);

$this->db->query("SET NAMES 'utf8'");
$query $this->db->get_where('usuarios'$cond); 
Ahora funciona bien, gracias por la ayuda

Etiquetas: mysql, tablas
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 18:31.