Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: danny920825 en 17 Febrero 2017, 17:06 pm



Título: [Resuelto] Problema con password_hash()
Publicado por: danny920825 en 17 Febrero 2017, 17:06 pm
Hola a todos. Hace un tiempo Engel Lex y !drvy me ayudaron con el tema de la encriptacion de las contraseñas al insertarlas en las BD. Estaba usando el método
Código
  1. crypt($pass, $salt)
pero según la documentación de PHP,
Código
  1. password_hash($string, PASSWORD_DEFAULT)
tiene un mayor cifrado. Pues bien, en este caso, está contraindicado utilizar un $salt y de hecho en futuras versiones será eliminada la opción. Pues bien, mi problema: Cuando realizo el registro en la BD lo hago de la siguiente forma:

Código
  1. //Página de registro
  2. include "bd.php"
  3. //recoger datos del formulario
  4.        $user=$_POST['usuario'];
  5. $pass=$_POST['password'];
  6.  
  7. //cifrar la contraseña para añadirla a la BD
  8. $cifrar=password_hash($pass, PASSWORD_DEFAULT);
  9.  
  10. $sql="insert into $tabla1 (usuario, password, rank) values ('$user', '$cifrar', 1)";
  11. $consulta = $mysqli->query ($sql) or die ("Problemas al insertar datos:<br>".mysqli_error($mysqli));
  12.  

Y creeme que inserta los datos a la perfección. Ahora... cuando voy a acceder a esos datos, hago lo siguiente:
Código
  1. //Página de registro
  2. include "bd.php"
  3. //recoger datos del formulario
  4.        $user=$_POST['usuario'];
  5. $pass=$_POST['password'];
  6.  
  7. //cifrar la contraseña para añadirla a la BD
  8. $cifrar=password_hash($pass, PASSWORD_DEFAULT);
  9.  
  10. $sql="select * from $tabla1 where usuario='$user' LIMIT 1";
  11. $consulta = $mysqli->query($sql) or die ("Usuario no encontrado");
  12. $reg = $consulta->fetch_array();
  13.  
  14. if (password_verify($cifrar, $reg['password']))
  15.        {
  16.                echo "Las contraseñas coinciden";
  17. }
  18. else
  19. {
  20. echo "Password enviado: ".$cifrar."<br>";
  21. echo "Password almacenado: ". $reg['password'];
  22. }
  23.  

Pero lo que hace es generar un nuevo hash en vez de generar el mismo. Probé escribiendo como contraseña 12345678 para descartar que fuera que escribía mal la contraseña pero nada. No funciona. Y sé que estoy haciendo algo mal porque si es una función recomendada, debe funcionar bien


Título: Re: [Ayuda] Problema con password_hash()
Publicado por: engel lex en 17 Febrero 2017, 18:05 pm
estás guardando la contraseña como hash y estás comparando con el texto en limpio, eso obviamente no va a funcionar, si usas password_hash tienes que usar

http://php.net/manual/es/function.password-verify.php (http://php.net/manual/es/function.password-verify.php)


Título: Re: [Ayuda] Problema con password_hash()
Publicado por: danny920825 en 17 Febrero 2017, 19:16 pm
Gracias. Ya vi que lo que estaba haciendo era cifrar nuevamente antes de comparar. No me habia dado cuenta que el password_verify lleva el string original y el hash que está guardado. Ok. Tema resuelto entonces