tool passwordhash password_verify password encriptar contraseñas contraseña php mysql mysqli truncate

passwordhash - php hash tool



php password_verify() hash y el pase no coincidirá (1)

"Cuando echo $ valid, la salida es $ 2y $ 10 $ zzZCN7UlukvY2skb3ELVp.4y3Oc7NJTEsFyqdstqYxT"

$2y$10$zzZCN7UlukvY2skb3ELVp.4y3Oc7NJTEsFyqdstqYxT el hash tiene solo 50 caracteres de longitud y es inválido / demasiado corto y, como dije, MySQL fallará en silencio; la información / verificación de errores no habría ayudado aquí.

La longitud de la columna de la contraseña debe ser de 60 (se sugiere 255), por lo que no se almacenó correctamente originalmente.

Deberá borrar su columna / tabla de contraseña, aumentar la longitud de la columna y comenzar de nuevo.

Referencia:

"Por lo tanto, se recomienda almacenar el resultado en una columna de base de datos que se pueda expandir más allá de los 60 caracteres (255 caracteres serían una buena opción)".

También puede modificar su consulta para leer como:

$con = new mysqli("xxx", "xxx", "xxx", "xxx"); if ($con->connect_error) { die(''Connect Error ('' . $con->connect_errno . '') '' . $con->connect_error); } $query = "SELECT `pass` FROM `user` WHERE `email`=''$emailLogin''"; $result = $con->query($query); // error checking on the query if (!$result) { echo "<p>There was an error in query: $query</p>"; echo $con->error; } $row_hash = $result->fetch_array(); if (password_verify($passLogin, $row_hash[''pass''])) { echo "Success!"; }

Editar:

Agregando de un comentario que dejé al OP:

Su función de verificación necesita tener una conexión a su base de datos, eso es lo que creo que está sucediendo aquí (alcance variable). Entonces necesitarás usar global $con; o pase la conexión (variable) a su función (que es mejor en la mayoría de los casos).

No sé si está haciendo un "incluir" para la función, y si es así, entonces ese es el otro problema.

Es decir: function VUP($con, $check, $valid){ o function VUP($check, $valid){ global $con; - Prueba ambos. Use $result = mysqli_query($con, $query) or die(mysqli_error($con)); en lugar de la que tienes ahora.

Guardo mis contraseñas en mi base de datos hash con password_hash (), y estoy tratando de verificar las contraseñas al iniciar sesión con password_verify (). Por algún motivo, password_verify () sigue devolviendo false.

Leí la documentación sobre esta función y decía para asegurarme de que el hash utilizado en la función está entre comillas simples ''''; de lo contrario, leerá el hash como si fueran tres variables debido a los $ '', así que intenté escribir $ valid como este ''$ valid''. Pero eso no funcionó.

Cuando echo $ valid, la salida es $ 2y $ 10 $ zzZCN7UlukvY2skb3ELVp.4y3Oc7NJTEsFyqdstqYxT

Cuando echo $ check, la salida es 123, que es la contraseña utilizada para crear la cuenta.

# # # # # # # # # # # #

Esta es la parte de mi login.php, y aquí es donde siento que está el problema.

$emailLogin = mysqli_real_escape_string($con, $_POST[''emailLogin'']); $passLogin = mysqli_real_escape_string($con, $_POST[''passLogin'']); $query = "SELECT `pass` FROM `user` WHERE `email`=''$emailLogin''"; $result = mysqli_query($con, $query); $row = mysqli_fetch_array($result); $pass = $row[''pass'']; $key = VUP($passLogin, $pass);

# # # # # # # # # #

Esto es parte de mi verify.php

function VUP($check, $valid){ if (password_verify($check, $valid)) { $key = 1; } else { echo ''Invalid password.''; $key = 0; die(); } return $key; }

# # # # # # # # # # #

También forma parte de verify.php

function SHP($password){ $hash = password_hash(''$password'', PASSWORD_BCRYPT); return $hash; }

Cualquier consejo sería muy útil,

Gracias por tu tiempo,

Micro