Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] comparar contraseñas md5 al hacer login

Estas en el tema de comparar contraseñas md5 al hacer login en el foro de PHP en Foros del Web. hola espero me puedan ayudar,,, tengo un registro de inicio el cual posee un campo contraseña, yo lo encripte con md5 , y lo guarda ...
  #1 (permalink)  
Antiguo 01/02/2013, 12:24
 
Fecha de Ingreso: septiembre-2012
Mensajes: 73
Antigüedad: 11 años, 6 meses
Puntos: 0
Pregunta comparar contraseñas md5 al hacer login

hola espero me puedan ayudar,,,
tengo un registro de inicio el cual posee un campo contraseña, yo lo encripte con md5 , y lo guarda bien. el problema resulta cuando quiero comparar la contraseña que envia el usuario con la que se encuentra en la base de datos, para eso tengo q encriptar pero lo hago y no funciona, creo q hay un problema con la funcion conexiones.

aqui tomo los valores del login para enviarlo a la funcion conexiones

Código PHP:
Ver original
  1. include ('funciones.php');
  2. //usuario y clave pasados por el formulario
  3. $nombre = $_POST['nombre'];
  4. $contrasena=md5($_POST['contrasena']);
  5. $valor= $_POST['valor'];
  6. //usa la funcion conexiones() que se ubica dentro de funciones.php
  7.  
  8.          if($nombre!="" && $contrasena!=""){
  9.            
  10.             conexiones($nombre, $contrasena);
  11.             }


este es parte del codigo de la funcion conexiones, no lo pegue todo por q no es relevante ... este es la parte donde hago la consulta y lo demas


Código PHP:
Ver original
  1. <?php
  2.  
  3. //funcion para conectar a la base de datos y verificar la existencia del usuario
  4. function conexiones($nombre, $contrasena) {
  5.    
  6.    
  7.     //conexion con el servidor de base de datos MySQL
  8.     $conectar = mysql_connect('localhost','root','');
  9.     //seleccionar la base de datos para trabajar
  10.     mysql_select_db('bd_ateneo',$conectar);
  11.     //sentencia sql para consultar el nombre del usuario
  12.    
  13.     $sql = "SELECT * FROM bd_ateneo.usuarios WHERE nombre='$nombre' AND contrasena='$contrasena'";
  14.     //ejecucion de la sentencia anterior
  15.     $ejecutar_sql=mysql_query($sql,$conectar);
  16. if(mysql_num_rows($ejecutar_sql)>0){
  17.         $fila=mysql_fetch_array($ejecutar_sql);    
  18.     }
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.          
  26.  
  27.     //si existe inicia una sesion y guarda el nombre del usuario
  28.     if (mysql_num_rows($ejecutar_sql)!=0){
  29.         //inicio de sesion
  30.         session_start();
  31.         //configurar un elemento usuario dentro del arreglo global $_SESSION
  32.         $_SESSION['nombre']=$nombre;
  33.         $_SESSION['nivel']=$fila["nivel"];
  34.         $_SESSION['cedula']=$fila["cedula"];
  35.         //retornar verdadero
  36.        
  37.        
  38.  
  39.  
  40.  
  41.        
  42.     if ($fila["nivel"]=="Administrador"){
  43.              header('Location:../Administrador.php');
  44.         }
cuando quito el md5, si inicia normal, pero cuando le agrego el md5 no inicia con los usuarios q tenian contraseñas encriptadas
  #2 (permalink)  
Antiguo 01/02/2013, 12:29
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: comparar contraseñas md5 al hacer login

- MD5 no es una encriptacion.
- Estás haciendo md5 , y luego comprobando si es vacío..eso no va a funcionar.
- No entiendo..si quitas el md5 "sí inicia normal"? Significa que te devuelve la query un usuario? O sea, que su password no está hasheado?
  #3 (permalink)  
Antiguo 01/02/2013, 12:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: comparar contraseñas md5 al hacer login

Sería interesante ver como haces el registro, ahora recuerda filtrar bien tus variables, es probable que tengas algún espacio o algo similar (aplicar trim()) ayuda.

Saludos.
  #4 (permalink)  
Antiguo 01/02/2013, 12:32
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: comparar contraseñas md5 al hacer login

en efecto, debes revisar si la contraseña se almacena hasheada, en otros casos he visto que al campo password le colocan un varchar(10) que NO cubre por completo la longitud del HASH, por el cual puede ser la fuente del fallo.

verifique estos puntos y pruebe.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #5 (permalink)  
Antiguo 01/02/2013, 13:07
 
Fecha de Ingreso: septiembre-2012
Mensajes: 73
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: comparar contraseñas md5 al hacer login

Cita:
Iniciado por dashtrash Ver Mensaje
- MD5 no es una encriptacion.
- Estás haciendo md5 , y luego comprobando si es vacío..eso no va a funcionar.
- No entiendo..si quitas el md5 "sí inicia normal"? Significa que te devuelve la query un usuario? O sea, que su password no está hasheado?
no las contraseñas no estan hasheada por eso quiero implementar md5.

el codigo si funciona bien, pero luego queria implemetar md5 para hasheado de la contraseña creo q se dice asi no c mucho de este tema. . para registrar usuarios, la contraseña si funciona el md5 y se genera la clave.
el problema resulta es para comparar las contraseñas la que hace el usuario de login.
con la que se mantiene en la base de datos..
cuando hago algo como esto
Código PHP:
$contrasena=md5($_POST['contrasena']); 
para hacer esta consulta
Código PHP:
$sql "SELECT * FROM bd_ateneo.usuarios WHERE nombre='$nombre' AND contrasena='$contrasena'"
ps simplemente no funciona. no c por q....
  #6 (permalink)  
Antiguo 01/02/2013, 13:10
 
Fecha de Ingreso: septiembre-2012
Mensajes: 73
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: comparar contraseñas md5 al hacer login

Cita:
Iniciado por maycolalvarez Ver Mensaje
en efecto, debes revisar si la contraseña se almacena hasheada, en otros casos he visto que al campo password le colocan un varchar(10) que NO cubre por completo la longitud del HASH, por el cual puede ser la fuente del fallo.

verifique estos puntos y pruebe.

la longitud es varchar(25).
y si tengo guardado algunas contraseñas con md5 y otras no , por q lo estoy recién colocando, por eso decia q cuando coloco la funcion md5 no funciona, pero cuando la quito inicia perfectamente
  #7 (permalink)  
Antiguo 01/02/2013, 13:12
 
Fecha de Ingreso: septiembre-2012
Mensajes: 73
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: comparar contraseñas md5 al hacer login

Cita:
Iniciado por GatorV Ver Mensaje
Sería interesante ver como haces el registro, ahora recuerda filtrar bien tus variables, es probable que tengas algún espacio o algo similar (aplicar trim()) ayuda.

Saludos.
este es una parte del codigo para registrar

Código PHP:
$cedula=$_POST['cedula'];
     
$nacionalidad=$_POST['nacionalidad'];
  
$nombre=$_POST['nombre'];
  
$contrasena=md5($_POST['contrasena']);
  
$r_contrasena=$_POST['r_contrasena'];
   
$correo=$_POST['correo'];
  
$sexo=$_POST['sexo'];
   
$f_nacimiento=$_POST['f_nacimiento']; 
 
    
//echo "<br>";
      
$sql="insert into usuarios (cedula,nacionalidad,nombre,contrasena,r_contrasena,correo,sexo,f_nacimiento,nivel) values

  ('$cedula','$nacionalidad','$nombre','$contrasena','$r_contrasena','$correo','$sexo','$f_nacimiento','estudiante')"


aqui si guarda la contraseña con md5, el problema resulta en comparar la contraseña cuando se hace login.
  #8 (permalink)  
Antiguo 01/02/2013, 13:32
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: comparar contraseñas md5 al hacer login

No hace falta que pegues más código entonces..Tu problema es que tienes usuarios con password en MD5, y otros que no...Supongo que los que NO tienen MD5 son los antiguos, así que, suponiendo que puedes filtrarlos (por id, si es autoincremental), con hacer un update de todos los usuarios antiguos, haciendo contrasena=MD5(contrasena) , los tendrás todos hasheados...Si a partir de ahí sigues con problemas...
  #9 (permalink)  
Antiguo 01/02/2013, 13:46
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: comparar contraseñas md5 al hacer login

También el campo varchar(25) no es suficiente, la longitud de md5 es de 32 carácteres por eso no te va a funcionar.

Saludos.
  #10 (permalink)  
Antiguo 01/02/2013, 13:55
 
Fecha de Ingreso: septiembre-2012
Mensajes: 73
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: comparar contraseñas md5 al hacer login

ya lo solucione muchas gracias a todos por la ayuda efectivamente era la longitud del campo. como mostre en los primeros codigos esta bien, la cuestion era en la base de datos, la longitud tiene q ser mas de 25 como dice GatorV y maycolalvarez
  #11 (permalink)  
Antiguo 18/05/2015, 12:34
 
Fecha de Ingreso: marzo-2015
Mensajes: 3
Antigüedad: 9 años
Puntos: 0
Respuesta: comparar contraseñas md5 al hacer login

Buen dia, sres Foros del Web.

Igual no he podido validar la contraseña con md5 me sale eeros que los datos no son correctos, ya cambie la longitud del varchar en el campo password, pero no he podido. Ya casi estoy ciego de revisar.

Gracias por su colaboracion.

Aca le muestro mi codigo:

Código PHP:
<?php

include("conectar_bd.php");

$usuario=$_POST["usuario"];
$password=$_POST["password"];

$paciente mysql_query("SELECT * FROM paciente WHERE cedulapaciente = '$usuario' AND password = '$password'");
$medico mysql_query("SELECT * FROM medico WHERE cedulamedico = '$usuario' AND password = '$password'");
$administrador mysql_query("SELECT * FROM administrador WHERE cedulaadmin = '$usuario' AND password = '$password'");

if(
mysql_num_rows($paciente) > 0) {
    
session_start();
    
$_SESSION['paciente']="$usuario";
    
header("Location: portalpaciente.php");

mysql_free_result($paciente);
exit(); 
}
else if(
mysql_num_rows($medico) > 0) {
    
session_start();
    
$_SESSION['medico']="$usuario";
    
header("Location: portalmedico.php");

mysql_free_result($medico);
exit(); 
}
else if(
mysql_num_rows($administrador) > 0) {
    
session_start();
    
$_SESSION['administrador']="$usuario";
    
header("Location: portaladministrador.php");

mysql_free_result($administrador);
exit();
}
else {
$mensajeaccesoincorrecto "El usuario y la clave no coinciden, por favor vuelva a introducirlos.";
echo 
$mensajeaccesoincorrecto; }

?>
  #12 (permalink)  
Antiguo 20/01/2016, 14:21
 
Fecha de Ingreso: diciembre-2015
Mensajes: 1
Antigüedad: 8 años, 3 meses
Puntos: 0
Respuesta: comparar contraseñas md5 al hacer login

Te falto incluir md5

$password=md5($_POST["password"]);

Etiquetas: contraseña, login, md5
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 08:06.