HMAC-SHA-256 en PHP
Je dois construire une autorisation de hachage à partir de cette chaîne:
kki98hkl-u5d0-w96i-62dp-xpmr6xlvfnjz:20151110171858:b2c13532-3416-47d9-8592-a541c208f755:hKSeRD98BHngrNa51Q2IgAXtoZ8oYebgY4vQHEYjlmzN9KSbAVTRvQkUPsjOGu4F
Ce secret est utilisé pour une fonction de hachage HMAC:
LRH9CAkNs-zoU3hxHbrtY0CUUcmqzibPeN7x6-vwNWQ=
L'autorisation de hachage j'ai pour générer de l'est: est-ce
P-WgZ8CqV51aI-3TncZj5CpSZh98PjZTYxrvxkmQYmI=
Il y a certaines choses à prendre soin de:
- La signature doivent être construits avec HMAC-SHA-256, comme spécifié dans RFC 2104.
- La signature doivent être encodé en Base64 URL-compatible tel que spécifié dans RFC 4648 Section 5 (Sécurité de l'alphabet).
Il y a aussi quelques pseudo-code pour la génération:
Signatur(Request) = new String(encodeBase64URLCompatible(HMAC-SHA-256(getBytes(Z, "UTF-8"), decodeBase64URLCompatible(getBytes(S, "UTF-8")))), "UTF-8")
J'ai essayé plusieurs choses en PHP, mais n'ont pas trouvé le bon algorithme encore. C'est le code que j'ai maintenant:
if(!function_exists('base64url_encode')){
function base64url_encode($data) {
$data = str_replace(array('+', '/'), array('-', '_'), base64_encode($data));
return $data;
}
}
$str = "kki98hkl-u5d0-w96i-62dp-xpmr6xlvfnjz:20151110171858:b2c13532-3416-47d9-8592-a541c208f755:hKSeRD98BHngrNa51Q2IgAXtoZ8oYebgY4vQHEYjlmzN9KSbAVTRvQkUPsjOGu4F";
$sec = "LRH9CAkNs-zoU3hxHbrtY0CUUcmqzibPeN7x6-vwNWQ=";
$signature = mhash(MHASH_SHA256, $str, $sec);
$signature = base64url_encode($signature);
if($signature != "P-WgZ8CqV51aI-3TncZj5CpSZh98PjZTYxrvxkmQYmI=")
echo "wrong: $signature";
else
echo "correct";
Il donne à cette signature:
K9lw3V-k5gOedmVwmO5vC7cOn82JSEXsNguozCAOU2c=
Comme vous pouvez le voir, la longueur de 44 caractères est correct. Veuillez m'aider à trouver l'erreur, ce simple problème me prend des heures encore, et il n'y a pas de solution.
Après la lecture de votre question deux fois, je ne sais toujours pas ce que votre question est.
J'ai besoin d'un hachage HMAC à partir d'une chaîne de signer et d'un secret. Si j'essaie de générer avec PHP, il échoue / donne le mal de hachage. Je pense que les spécifications RFC ne sont pas remplies.
Je pense que c'est à peu près en raison de
J'ai besoin d'un hachage HMAC à partir d'une chaîne de signer et d'un secret. Si j'essaie de générer avec PHP, il échoue / donne le mal de hachage. Je pense que les spécifications RFC ne sont pas remplies.
Je pense que c'est à peu près en raison de
base64url_encode
. Si vous en avez besoin pour être urlencoded pour quelque raison que ce soit, de l'utilisation urlencode
et puis urldecode
sur le serveur avant de vérifier.
OriginalL'auteur Richard | 2016-01-22
Vous devez vous connecter pour publier un commentaire.
Il y a deux choses à remarquer:
À l'aide de hachage extension, cela devient:
Sorties:
true
danshash_hmac
et le décodage base64 de la clé, qui doit base64 URL aussi.va hash_hmac sera toujours générer de l'unique chaîne de...?
Non, c'est la production est basée sur la chaîne d'entrée et la clé. Donner la même clé et de la ficelle, et il produira le même résultat.
OriginalL'auteur weirdan
Simplement utiliser hash_hmac() fonction disponible dans PHP.
Exemple :
Doc ici : http://php.net/manual/fr/function.hash-hmac.php
OriginalL'auteur Meloman