¿En qué se diferencian estas 2 líneas de PHP?
Pregunta
Suponiendo que tenemos una sal que está en la base de datos y que se ha generado de esta manera
$ salt = time ();
¿Cuál es la diferencia entre estas 2 líneas?
$pass1 = hash('sha1', $password . $salt);
$pass2 = hash_hmac('sha1', $password, $salt);
No producen la misma salida. El primero, la función hash
toma 2 parámetros, mientras que el hash_hmac
necesita 3 parámetros. Por lo tanto, pensaría que podemos obtener ese tercer parámetro adicional usando $ salt
por separado (para cumplir con el tercer parámetro) en lugar de concatenarlo con la contraseña ( $ password. $ Salt
) como hicimos en la línea 2. Pero no es tan simple, los 2 resultados son diferentes. ¿Por qué? ¿Qué está pasando exactamente aquí?
Solución
Porque HMAC SHA-1 no es lo mismo que SHA-1 con el mensaje y la clave concatenados. HMAC es más como sha1 ($ salt. Sha1 ($ salt. $ Contraseña))
, pero no exactamente. Wikipedia tiene una buena descripción de HMAC .