La funzione hash_hmac
prende l'input binario, cioè le stringhe fatte di byte non elaborati. La codifica dei caratteri non dovrebbe entrare in gioco.
Ad esempio, se si dovesse usare SHA256 per calcolare la chiave HMAC, da una password, si farebbe qualcosa del genere:
// second parameter selects raw bytes or ASCII hex for output (false = hex, true = raw)
$hmac_key = hash("sha256", $password, true);
// last parameter is, again, whether or not to output raw bytes
echo hash_hmac("sha256", $data, $hmac_key, false);
Supponendo che la password sia "polinomiale", la variabile $hmac_key
dovrebbe essere:
61890d2331f470cb4caeda6035ae27809bee14a42ba3e024ebcfeec9086764d0
Si noti che questa è una rappresentazione esadecimale del contenuto della variabile - in realtà conterrà byte non elaborati. Ora supponiamo che il nostro messaggio sia "Salve!". Il risultato è il seguente:
e075d7284eb03baedabb7c27ae1e9f271e763b67c776f3894417f310378da10b
(il precedente è stato generato da QuickHash )
Gli schemi HMAC richiedono che la lunghezza della chiave sia uguale alla dimensione del blocco dell'hash. Alcune implementazioni utilizzano un algoritmo hash per produrre la dimensione corretta se l'input è maggiore o minore della dimensione del blocco. Di solito l'algoritmo hash utilizzato è la versione non HMAC di qualunque cosa tu stia usando. Non sono sicuro che PHP lo faccia e (se lo fanno) quale metodo usano.