In che modo differiscono queste 2 linee di PHP?
Domanda
Supponendo che abbiamo un salt nel database e che è stato generato in questo modo
$ salt = time ();
Qual è la differenza tra queste 2 righe.
$pass1 = hash('sha1', $password . $salt);
$pass2 = hash_hmac('sha1', $password, $salt);
Non producono lo stesso output. Il primo, la funzione hash
accetta 2 parametri, mentre hash_hmac
richiede 3 parametri. Penseresti quindi che possiamo ottenere quel terzo parametro extra usando $ salt
separatamente (per soddisfare il terzo parametro) invece di concatenarlo con la password ( $ password. $ Salt
) come abbiamo fatto nella riga 2. Ma non è così semplice, i 2 risultati sono diversi. Perché? Cosa sta succedendo esattamente qui?
Soluzione
Perché HMAC SHA-1 non è uguale a SHA-1 con il messaggio e la chiave concatenati. HMAC è più simile a sha1 ($ salt. Sha1 ($ salt. $ Password))
, ma non esattamente. Wikipedia ha una bella descrizione di HMAC .