En quoi ces 2 lignes de PHP sont-elles différentes?
Question
En supposant que nous ayons un sel qui est dans la base de données et qui a été généré comme ceci
$ salt = time ();
Quelle est la différence entre ces 2 lignes.
$pass1 = hash('sha1', $password . $salt);
$pass2 = hash_hmac('sha1', $password, $salt);
Ils ne produisent pas le même résultat. Le premier, la fonction hash
prend 2 paramètres, alors que le hash_hmac
nécessite 3 paramètres. Vous penseriez donc que nous pouvons obtenir ce troisième paramètre supplémentaire en utilisant $ salt
séparément (pour remplir le troisième paramètre) au lieu de le concaténer avec le mot de passe ( $ password. $ Salt
) comme nous l'avons fait à la ligne 2. Mais ce n'est pas si simple, les 2 résultats sont différents. Pourquoi? Qu'est-ce qui se passe exactement ici?
La solution
Parce que HMAC SHA-1 n’est pas identique à SHA-1 avec le message et la clé concaténés. HMAC ressemble plus à sha1 ($ salt. Sha1 ($ salt. $ Password))
, mais pas exactement. Wikipedia a une description agréable de HMAC .