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);