Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] variables diferentes en password mysql

Estas en el tema de variables diferentes en password mysql en el foro de PHP en Foros del Web. Hola, tengo este problema y no sé porque ocurre. Falla la conexión a la base de datos por error en la contraseña : Warning: mysqli_connect(): ...
  #1 (permalink)  
Antiguo 21/04/2015, 06:34
 
Fecha de Ingreso: mayo-2013
Ubicación: pamplona
Mensajes: 8
Antigüedad: 10 años, 11 meses
Puntos: 0
variables diferentes en password mysql

Hola, tengo este problema y no sé porque ocurre. Falla la conexión a la base de datos por error en la contraseña :

Warning: mysqli_connect(): (28000/1045): Access denied for user 'usuario_1'@'10.0.90.6' (using password: YES)

la contraseña la tengo encriptada en un archivo fuera de (www.) en la carpeta raiz, llamo a este archivo .php con un include de la siguiente manera:

include ('../wz_files/connect1.php');

hasta aqui todo bien, luego desencripto de la siguiente manera :

$iv = 'cadena____iv';
$key='cadena____key';
$password_encryptado = base64_decode($password_encryptado);
$zub3 = mcrypt_module_open("rijndael-128", "", "cbc", "");
mcrypt_generic_init($zub3, $key, $iv);
$ole = mdecrypt_generic($zub3, $password_encryptado);
mcrypt_generic_deinit($zub3); mcrypt_module_close($zub3);

Al desencriptar la cadena $password es igual a la que tengo en el mysql pero al compararlas con un if ( $password==$password_mysql ) , dice que son diferentes.

será que tendré que hacer forzado de tipos a string o algo asi...

Alguien me puede ayudar? gracias.
  #2 (permalink)  
Antiguo 21/04/2015, 06:36
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 1 mes
Puntos: 67
Respuesta: variables diferentes en password mysql

Eso es problema de privilegios en tu base de datos.

Saludos.
__________________
No te preocupes si tu código no funciona bien. Si todo lo hiciera, no tendrías trabajo.
  #3 (permalink)  
Antiguo 21/04/2015, 06:44
 
Fecha de Ingreso: mayo-2013
Ubicación: pamplona
Mensajes: 8
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: variables diferentes en password mysql

si pongo el password manualmente directamente dentro del mysql_connect(), si me entra y puedo conectarme, por eso digo que es muy extraño, no creo que sea de privilegios si me daja entrar poniendo la contraseña manualmente, al comparar la cadena $password con la contraseña real, aun siendo iguales con un if me dice que son diferentes.

Si puedo entrar poniendo la contraseña manualmente no creo que sea de privilegios no?
  #4 (permalink)  
Antiguo 21/04/2015, 07:00
 
Fecha de Ingreso: mayo-2013
Ubicación: pamplona
Mensajes: 8
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: variables diferentes en password mysql

He comprobado que la cadena $password es diferente a la que tengo en mysql, aunque cuando hago un echo $password; en pantalla me muestra el contenido de la variable y aparentemente es igual que la que tengo en mysql,

no sé por que son diferentes...
  #5 (permalink)  
Antiguo 21/04/2015, 09:29
 
Fecha de Ingreso: mayo-2013
Ubicación: pamplona
Mensajes: 8
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: variables diferentes en password mysql

He revisado los privilegios para este usuario y tiene todos los privilegios.

Alguien sabe ? como dos cadenas pueden ser iguales al mostrar su contenido en pantalla mediante un echo, y sin embargo ser diferentes !=

Gracias.
  #6 (permalink)  
Antiguo 21/04/2015, 10:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: variables diferentes en password mysql

Vamos a hacer una aclaración referente a la password de un usuario registrado en MySQL, respecto a su almacenamiento:
- El contenido del campo de password de la tabla USER, es una cadena encriptada con un algoritmo de encriptación irreversible propio de MySQL.
- Cuando se realiza el logueo de un usuario en MySQL, sea manual o por una librería como MYSQLI, lo que MySQL debe recibir es la password sin encriptar.
- Al recibir la password, MySQL aplica la encriptación propia a la cadena recibida, y con el resultante lo compara con lo que la tabla tiene. Si son iguales, acepta la conexión.
- Enviar como password una cadena igual a la cadena contenida en la tabla USER no sirve, porque MySQL la encripará neuvamente y comparara ese resultado con lo que tiene, y nunca coincidirían.

SI esto último es lo que estás haciendo, como pareces describir, entonces estás haciendo mal.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 21/04/2015, 11:50
 
Fecha de Ingreso: enero-2015
Mensajes: 35
Antigüedad: 9 años, 3 meses
Puntos: 1
Respuesta: variables diferentes en password mysql

deberías tambien verificar que no tengas espacios entre tus password u otros simbolos, para hacer la comparación entre cadenas de password yo te sugeriría grabarlo en un archivo de texto (mediaten file_put_contents()) ambos cadenas y alli hacer la comparación y grabar tambien la longitud, porque el navegador no te muestra apropiadamente las cadenas binarias.
  #8 (permalink)  
Antiguo 21/04/2015, 12:23
 
Fecha de Ingreso: mayo-2013
Ubicación: pamplona
Mensajes: 8
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: variables diferentes en password mysql

gracias por responder a los dos,

gnzsoloyo, no no es eso que comentas, no estoy comparando password de la tabla user ni nada parecido, no tiene nada que ver.

orodrf, gracias por la recomendación, lo tendré en cuenta, sobre todo el tema de la longuitud de la cadena por que por ahi van los tiros.

Esto es lo que he estado investigando hasta ahora, he hecho un strlen() de la cadena $password despues de desencriptarla y antes de hacer el mysql_connet() y resulta que la cadena tiene 10 caracteres más que la original, luego le he hecho un var_export() y resulta que la función mdecrypt_generic() le mete 10 caracteres mas al final de la cadena que genera, parece que es información adicional, lo que muestra de relleno es lo siguiente:
password mysql : LW3w82AvZmxazEfZGR32m1 y var_export() muestra esto :

'LW3w82AvZmxazEfZGR32m1' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . ''

como puedo solucionarlo? divido la cadena en dos a partir del caracter 20?
no se porque hace eso mdecrypt_generic, alguna idea? gracias.
  #9 (permalink)  
Antiguo 21/04/2015, 13:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: variables diferentes en password mysql

A ver si se entiende...
SI insertas esto en la cadena de conexión:
Cita:
LW3w82AvZmxazEfZGR32m1
Lo que MySQL procesará es esto:
Cita:
*C7879FF8968EEB4B6D2EFC91275A46F1427558F5
y eso debe ser igual a lo que contiene la columna "PASSWORD" de la tabla MYSQL.USER.

¿Estamos de acuerdo?

Bien, al momento de ejecutarse el script connect1.php, debe estar pasando como parámetro de la conexión esto:
Cita:
LW3w82AvZmxazEfZGR32m1
¿Eso es correcto o no? ¿Estás paasnado esa password?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 21/04/2015, 13:45
 
Fecha de Ingreso: enero-2015
Mensajes: 35
Antigüedad: 9 años, 3 meses
Puntos: 1
Respuesta: variables diferentes en password mysql

Ocurre que al desencriptar te esta anexando caracteres nulos, (ascii=0) al final 'LW3w82AvZmxazEfZGR32m1' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . ''

lo puedes solucionar con bucle formando una nueva cadena sin incluir los (\0), ahora del porque la funcion te hace eso seria la pregunta???, quizas la funcion devuelve una longitud fija de caracteres no se o quizas no estes utilizando correctamente las funciones de encriptacion debes remitirte al manual.

"abc\0\0\"!=="abc" (no son iguales) y en el navegador veras "abc"==="abc"
  #11 (permalink)  
Antiguo 22/04/2015, 04:43
 
Fecha de Ingreso: mayo-2013
Ubicación: pamplona
Mensajes: 8
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: variables diferentes en password mysql

de nuevo gracias a los dos por contestar,

gnzsoloyo, de nuevo no es lo que comentas, lamento que no comprendas lo expuesto, aun asi gracias por contestar.

orodrf, exacto eso es lo que ocurre,
mdecrypt_generic() mete informacion adicional, he leido el manual y parece que es asi, he probado cambiando el modo en mcript_module_open, y tambien generando una iv con mcrypt_create_iv, ya que antes generaba una manualmente y nada, tambien he probado quitando base64_decode, y tampoco de una manera o de otra siempre le añade informacion adicional, ya sea 10 caractares más, o 5 caracteres más o 2 caracteres más, no sé porque ocurre eso.

Total que al final lo he solucionado creando una subcadena y extrayendo una porcion de la cadena desencriptada de la siguiente manera (no se si será la mejor forma pero yo lo he solucionado asi) :

$ole=substr($ole,0,22);

Explico por si a alguien le interesa : $ole es la cadena desencriptada, 0 es el comienzo a extraer y 22 son los caracteres totales a extraer para formar la subcadena.

Tema solucionado y cerrado, gracias por contestar. Saludos.
  #12 (permalink)  
Antiguo 22/04/2015, 05:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: variables diferentes en password mysql

No es que no lo haya entendido, pero el problema original que planteaste como mensaje de error, es propio del uso del password del usuario de MYSQL, y sólo se da cuando hay problemas de permisos, o bien errores de password en el login:
Cita:
Warning: mysqli_connect(): (28000/1045): Access denied for user 'usuario_1'@'10.0.90.6' (using password: YES)
Y en ningun momento decías nada que me hiciera pensar que estabas haciendo correctamente el login. Como ni siquiera te molestaste en poner el codigo de db.php, como te pedí, no podía saberlo con certeza.

Para futuro, trata de explicar más técnicamente el problema, y acotarlo de un modo adecuadoo. Es más lo que tuve que inferir que lo que describes. Hay huecos en tu explicación inicial que se prestan a confusiones.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: mysql, password, sql, variables
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 21:33.