Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema al comparar contraseñas con crypt()

Estas en el tema de Problema al comparar contraseñas con crypt() en el foro de PHP en Foros del Web. Cita: Iniciado por hhs Primero antes de usar una función lee el manual, cuando tu utilizar crypt sin salto va utilizar un algoritmo por default ...

  #31 (permalink)  
Antiguo 23/03/2015, 11:36
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 10 años, 8 meses
Puntos: 145
Respuesta: Problema al comparar contraseñas con crypt()

Cita:
Iniciado por hhs Ver Mensaje
Primero antes de usar una función lee el manual, cuando tu utilizar crypt sin salto va utilizar un algoritmo por default por lo cual no sabes de que longitud sera la cadena resultante. Así que lo primero a cambiar es que aceptes mas de 25 caracteres. Cámbialo a 255 y prueba de nuevo
Correcto, esta vez me re-registré y me generó una contraseña de mayor caracteres. Gracias.

Pero sigue sin reconocerme las contraseñas en el login.
__________________
¿Te sirvió la respuesta? Deja un +1
  #32 (permalink)  
Antiguo 23/03/2015, 11:42
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Problema al comparar contraseñas con crypt()

debes de aislar el problema, así que verifica que puedas hacer login sin utilizar la base de datos.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #33 (permalink)  
Antiguo 23/03/2015, 12:02
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 10 años, 8 meses
Puntos: 145
Respuesta: Problema al comparar contraseñas con crypt()

Cita:
Iniciado por hhs Ver Mensaje
debes de aislar el problema, así que verifica que puedas hacer login sin utilizar la base de datos.
Imagino que te refieres a algo así.

Código PHP:
Ver original
  1. $email = '[email protected]';
  2. $pass = 'minuevapassword';
  3. $passwordDB = crypt($pass);
  4.  
  5. if(password_verify($pass, $passwordDB)){
  6. // Se inicia la sesión
  7.     $_SESSION['usuario'] = $datos['email'];
  8.     $_SESSION['estado'] = 'Autenticado';
  9.     $incorrecto = "Estás conectado/a como <strong>".$email."</strong> <br><br> <a href='http://www.ejemplo.com/BD/inicio'>Ir al inicio</a>";
  10.     //$stm = $connection->prepare("UPDATE usuarios SET ip_ultima='$ip' WHERE email='$email' ");
  11.     //$stm->execute();
  12. }else{
  13.     $incorrecto = "El mail o la contraseña son incorrectos. <br> <a href='javascript:history.back()'>Volver y corregir</a>";
  14. };

Y este es el resultado; sí puedo loguearme.

__________________
¿Te sirvió la respuesta? Deja un +1
  #34 (permalink)  
Antiguo 23/03/2015, 12:12
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Problema al comparar contraseñas con crypt()

Ok, ahora para los mismo datos conocidos intenta hacer el login utilizando la base de datos y manda los resultados
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Última edición por hhs; 23/03/2015 a las 12:50
  #35 (permalink)  
Antiguo 23/03/2015, 14:04
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 10 años, 8 meses
Puntos: 145
Respuesta: Problema al comparar contraseñas con crypt()

Cita:
Iniciado por hhs Ver Mensaje
Ok, ahora para los mismo datos conocidos intenta hacer el login utilizando la base de datos y manda los resultados
Correcto.

Creé desde PHPMyAdmin un nuevo "usuario" donde el mail era "[email protected]" y la contraseña era "minuevapassword" pero encriptada.
De vuelta a la web, ingeresé ese mail y esa contraseña (sin encriptar), y me lo dio por válido.

Pero ahora he añadido comprobaciones de mail y password que NO me permiten ingresar si la contraseña no es la misma que en la BD (encriptada).

Código PHP:
Ver original
  1. //Conecta a la BD y selecciona mail y contraseña
  2. $consulta = "SELECT * FROM usuarios WHERE email = '$email' AND password = '$pass' ";
  3.  
  4. $resultado = mysqli_query($connection, $consulta) or die(mysql_error());
  5. $datos = mysqli_fetch_array($resultado);
  6.  
  7. $passwordDB = crypt($pass);
  8. if($datos['email'] == $email and password_verify($pass, $passwordDB)){
  9. // Se inicia la sesión
  10.     $_SESSION['usuario'] = $datos['email'];
  11.     $_SESSION['estado'] = 'Autenticado';
  12.     $mensaje_login = "Estás conectado/a como <strong>".$email."</strong> <br><br> <a href='http://www.ejemplo.com/BD/inicio'>Ir al inicio</a>";
  13.     $stm = $connection->prepare("UPDATE usuarios SET ip_ultima='$ip' WHERE email='$email' ");
  14.     $stm->execute();
  15. } else if ($datos['email'] != $email || $datos['email'] == "" || password_verify($pass, $passwordDB) != $passwordDB )
  16. {
  17.     $mensaje_login = "El mail o la contraseña son incorrectos. <br> <a href='javascript:history.back()'>Volver y corregir</a>";
  18. };

Si en la consulta lo dejo así:

Código PHP:
Ver original
  1. $consulta = "SELECT * FROM usuarios WHERE email = '$email' ";

Literalmente te deja entrar sin filtros hayas escrito o no un mail y/o una contraseña.

__________________
¿Te sirvió la respuesta? Deja un +1
  #36 (permalink)  
Antiguo 23/03/2015, 14:10
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Problema al comparar contraseñas con crypt()

Eso es normal por que tienes un error de lógica, estas utilizando la ontraseña que te envia el formulario para validar y esa siempre es igual. En otras palabras no estas comparando lo que te envían contra lo que tienes en la base de datos (email es el único que evaluas)
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #37 (permalink)  
Antiguo 23/03/2015, 14:19
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 10 años, 8 meses
Puntos: 145
Respuesta: Problema al comparar contraseñas con crypt()

Cita:
Iniciado por hhs Ver Mensaje
Eso es normal por que tienes un error de lógica, estas utilizando la ontraseña que te envia el formulario para validar y esa siempre es igual. En otras palabras no estas comparando lo que te envían contra lo que tienes en la base de datos (email es el único que evaluas)
Entonces busco la contraseña en la BD...

Código PHP:
Ver original
  1. //Conecta a la BD y selecciona mail y contraseña
  2. $consulta = "SELECT * FROM usuarios WHERE email = '$email' and password='$pass'";
  3.  
  4. $resultado = mysqli_query($connection, $consulta) or die(mysql_error());
  5. $datos = mysqli_fetch_array($resultado);
  6.  
  7. $passwrd = $datos['password'];
  8.  
  9. $passwordDB = crypt($pass);
  10. if($datos['email'] == $email and password_verify($pass, $passwordDB)==$passwrd ){
  11. // Se inicia la sesión
  12.     $_SESSION['usuario'] = $datos['email'];
  13.     $_SESSION['estado'] = 'Autenticado';
  14.     $mensaje_login = "Estás conectado/a como <strong>".$email."</strong> <br><br> <a href='http://www.ejemplo.com/BD/inicio'>Ir al inicio</a>";
  15.     $stm = $connection->prepare("UPDATE usuarios SET ip_ultima='$ip' WHERE email='$email' ");
  16.     $stm->execute();
  17. } else if ($datos['email'] != $email || $datos['email'] == "" || $pass == "" ||!password_verify($pass, $passwordDB) )
  18. {
  19.     $mensaje_login = "El mail o la contraseña son incorrectos. <br> <a href='javascript:history.back()'>Volver y corregir</a>";
  20. };

Pero aunque sea exactamente igual que la de la BD no me la da por válido.

Ay.

__________________
¿Te sirvió la respuesta? Deja un +1
  #38 (permalink)  
Antiguo 23/03/2015, 14:35
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Problema al comparar contraseñas con crypt()

Por que sigues cometiendo errores de lógica, lee el manual para que entiendas como funciona password_verify
http://php.net/manual/es/function.password-verify.php
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #39 (permalink)  
Antiguo 23/03/2015, 14:50
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 10 años, 8 meses
Puntos: 145
Respuesta: Problema al comparar contraseñas con crypt()

Cita:
Iniciado por hhs Ver Mensaje
Por que sigues cometiendo errores de lógica, lee el manual para que entiendas como funciona password_verify
http://php.net/manual/es/function.password-verify.php
Curioso. No me devuelve los valores de consulta.

Código PHP:
Ver original
  1. $consulta = "SELECT * FROM usuarios WHERE email = '$email' and password = '$pass' ";
  2.  
  3. $resultado = mysqli_query($connection, $consulta) or die(mysql_error());
  4. $datos = mysqli_fetch_array($resultado);
  5.  
  6. $mail = $datos['email'];
  7. $passwrd = $datos['password'];

Cuando paso $mail o $passwrd a un 'echo' en HTML no me aparece ninguna información.

Código HTML:
Ver original
  1. <p>email: <?php echo $mail ?></p>
  2. <p>pass: <?php echo $pass ?></p>
  3. <p>passwrd: <?php echo $passwrd ?></p>
  4. <p>passwordDB: <?php echo $passwordDB ?></p>

Código:
email: #sin información
pass: minuevapassword #la contraseña que escribí en el form.
passwrd: #sin información
passwordDB: $1$lr4vj0Lx$vFFDWpJC7hPzg2ZbVd3dm0 #encriptación de $pass
__________________
¿Te sirvió la respuesta? Deja un +1
  #40 (permalink)  
Antiguo 23/03/2015, 15:01
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 10 años, 8 meses
Puntos: 145
Busqueda Respuesta: Problema al comparar contraseñas con crypt()

Solucionado. Al final el problema era totalmente de la consulta.

Cuando esta era:

Código PHP:
Ver original
  1. $consulta = "SELECT * FROM usuarios WHERE email = '$email' and password = '$pass' ";

Tiene que ser:

Código PHP:
Ver original
  1. $consulta = "SELECT * FROM usuarios WHERE email = '$email' and password = password ";

Entonces...

Código PHP:
Ver original
  1. //Obtengo los datos del formulario
  2. $email = $_POST["user"];
  3. $pass = $_POST["pass"];
  4.  
  5. //Conecta a la BD y selecciona mail y contraseña
  6. $consulta = "SELECT * FROM usuarios WHERE email = '$email' and password = password ";
  7.  
  8. $resultado = mysqli_query($connection, $consulta) or die(mysql_error());
  9. $datos = mysqli_fetch_array($resultado);
  10.  
  11. $passwrd = $datos['password'];
  12.  
  13. $passwordDB = crypt($pass);
  14.  
  15. $hola = "";
  16.  
  17. if($datos['email'] == $email and password_verify($pass, $passwrd)){
  18. // Se inicia la sesión
  19.     $_SESSION['usuario'] = $datos['email'];
  20.     $_SESSION['estado'] = 'Autenticado';
  21.     $mensaje_login = "Estás conectado/a como <strong>".$email."</strong> <br><br> <a href='http://www.ejemplo.com/BD/inicio'>Ir al inicio</a>";
  22.     $stm = $connection->prepare("UPDATE usuarios SET ip_ultima='$ip' WHERE email='$email' ");
  23.     $stm->execute();
  24. } else if ( $datos['email'] != $email || $datos['email'] == "" || $pass == "" ||!password_verify($pass, $passwrd) )
  25. {
  26.     $mensaje_login = "El mail o la contraseña son incorrectos. <br> <a href='javascript:history.back()'>Volver y corregir</a>";
  27. };

__________________
¿Te sirvió la respuesta? Deja un +1
  #41 (permalink)  
Antiguo 23/03/2015, 15:12
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Problema al comparar contraseñas con crypt()

Excelente, procura darle solucionado al tema
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #42 (permalink)  
Antiguo 23/03/2015, 15:15
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 10 años, 8 meses
Puntos: 145
Respuesta: Problema al comparar contraseñas con crypt()

Cita:
Iniciado por hhs Ver Mensaje
Excelente, procura darle solucionado al tema
Sí, sí. Muchas gracias a todos por la paciencia. Sois los mejores.

Aunque ahora me queda por solucionar porqué no se me mantienen las sesiones aquí.
__________________
¿Te sirvió la respuesta? Deja un +1

Etiquetas: contraseñas, fecha, mysql, registro, select, sql, tabla, usuarios
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:47.