Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/04/2016, 04:41
Rider_Gotha
 
Fecha de Ingreso: noviembre-2015
Mensajes: 9
Antigüedad: 9 años
Puntos: 0
Busqueda problemas con password_hash() y password_verify()

Muy buenas,

Estoy trabajando en un proyecto en el que vamos a necesitar un loggin con un usuario y una contraseña. Leyendo por el foro he encontrado una de las mejores soluciones, por lo menos más seguras, la opción de utilizar password_hash(), para aprender a utilizarlo he creado un ejemplo, pero no consigo que funcione..

recojo la información por formulario, la guardo en la base de datos, a la hora de loggear al usuario. Pero en el momento de sacar la contraseña de la base de datos y realizar la función password_verify() siempre me dice que es falso.

Un dato curioso, que puede ser el problema principal es que si encripto la contraseña y justo en ese mismo archivo verifico la generada con la original si me da que es verdadero.


Os muestro el código para aclarar un poco más.
Formulario html
Código HTML:
 <h5>Crear usuario</h5>
        <form action="recogida.php" method="post">
            <input type="hidden" name="accion" value="nuevo"/>
            <input type="text" name="nombreUsuario" placeholder="Nombre" required/>
            <input type="password" name="passwdUsuario" placeholder="Contraseña" required/>
            <input type="submit"/>            
        </form>
        
        <hr>
        
        <h5>Login</h5>
        <form action="recogida.php" method="post">
            <input type="hidden" name="accion" value="login"/>
            <input type="text" name="loginNombre" placeholder="Nombre" required/>
            <input type="password" name="loginPasswd" placeholder="Contraseña" required/>
            <input type="submit"/>            
        </form> 
Codigo php
Código PHP:

<?php
//Conexión a la base de datos.
$server 'localhost';
$db 'prueba_cifrado';
$userDB 'root';

$conexion = new PDO("mysql:host=" $server ";dbname=" $db ";charset=utf8"$userDB);

//Recogida de datos del formulario de nuevo usuario e insercción.
if($_POST['accion'] == "nuevo") {
    
$nombreUsuario $_POST['nombreUsuario'];
    
$passwdUsuario $_POST['passwdUsuario'];
               
    
$hash password_hash($passwdUsuarioPASSWORD_DEFAULT); //Encriptación por defecto de la contraseña.

    
$insert "INSERT INTO `usuario`(`idUsuario`, `nombreUsuario`, `passwdUsuario`) VALUES ('','" $nombreUsuario "', '" $hash "')";

    
$conexion->exec($insert);
    
    
header('Location:inicio.php');
}

//Recogida de datos del formulario de logueo y consulta a la base de datos. 
if($_POST['accion'] == "login") {
    
$nombreIntroducido $_POST['loginNombre'];
    
$passwdIntroducido $_POST['loginPasswd'];
    
    echo 
"Nombre introducido: " $nombreIntroducido;
    echo 
"<br>Password intro: " $passwdIntroducido;
    
    
$seleccion "SELECT nombreUsuario, passwdUsuario FROM usuario WHERE nombreUsuario= '" $nombreIntroducido "'";
    
$consulta $conexion->query($seleccion);
    
$registro $consulta->fetchObject();
    
    
$nombreUsuarioDB $registro->nombreUsuario;
    
$passwdUsuarioDB $registro->passwdUsuario;
    
    echo 
"<br>Nombre en la DB: " $nombreUsuarioDB;
    echo 
"<br>Password en la DB: " $passwdUsuarioDB;
    
    if (
password_verify($passwdIntroducido$passwdUsuarioDB)) {
        echo 
"<br>La contraseña es válida!";
    } else {
        echo 
"<br>La contraseña no es válida.";
    }
}