inicio de sesión no funciona utilizando hash_pbkdf2 [cerrado]

-1

estoy almacenando la contraseña usando hash_pbkdf2 pero ahora he encontrado un problema

mi código:

1.para registrarse

    $salt = openssl_random_pseudo_bytes(125);//salt
    $final_pass = hash_pbkdf2("sha512",$pass,$salt,1,125);//where $pass is the password entered by the user

2.para iniciar sesión

   $found_pass=$row['salt'];//retrieve the salt in the db
   $final_pass= hash_pbkdf2("sha512",$password,$found_salt,1,125);

el inicio de sesión no parece funcionar, ¿por qué? Si alguien me puede ayudar

    
pregunta Immortal Dude 25.02.2014 - 22:24
fuente

1 respuesta

1

Oh, Señor.

Mira, Sr.Coder. No hay falta de respeto, pero si ese código va al entorno de producción, pídale a alguien más que lo haga. Sé que todos tenemos que comenzar en algún lugar, pero aquí no es donde debería comenzar el código de seguridad . Dicho esto, respondamos a tu pregunta.

En primer lugar, estás usando hash_pbkdf2 , que es una función de PHP 5.5. Dado que ya está codificando para PHP 5.5, es mejor usar la API password_hash . Solo necesitas dos entradas para password_hash ; la contraseña y el algoritmo (se recomienda PASSWORD_BCRYPT ). La salida es una cadena que contiene todo lo que necesita (el salt generado automáticamente, la contraseña, el algoritmo y las iteraciones). Toma esa cadena y la almacena en la base de datos.

Segundo, estás usando una iteración. ¿Cuál es el punto de? Desea que el proceso sea lo más lento posible, a la vez que lo mantiene lo más usable posible. Una iteración es extremadamente baja. Comience con 1000 como mínimo.

Tercero, ¿qué pasa con la sal gigantesca? Cualquier cosa superior a 128 bits (16 bytes) no es necesaria.

Para la verificación (inicio de sesión), solo necesita un método; password_verify . Usted da la cadena de hash (de la base de datos), y la contraseña. La salida es true para una verificación exitosa, o false para una verificación fallida. Aquí hay un ejemplo:

//Register
$hashString_ToTheDB = password_hash($userPass, PASSWORD_BCRYPT);

//Login
$isCorrectPassword = password_verify($userPass, $hashString_FromTheDB);
    
respondido por el Adi 25.02.2014 - 22:56
fuente

Lea otras preguntas en las etiquetas