Comment obtenir PHP pour créer HMAC-SHA1 des chaînes de caractères comme Objective-C?
Je suis en train de mettre en œuvre une solution d'authentification avec PHP et Objective-C. dans les Deux langues, de créer leur propre HMAC-SHA1 chaînes codées avec la même clé et le même secret.
Apparemment, ils semblent différer, à leur manière, comment ils le font.
Sur Objective-C, je suis en utilisant OAuthCustomer que la signature de la classe qui produit la bonne à la recherche chaîne codée:
/3n/d4sKN6k3I7nBm1qau59UukU=
Sur PHP côté, je suis en utilisant la fonction intégrée hash_hmac('sha1',...) avec un encodage base64 qui produit ce:
ZmY3OWZmNzc4YjBhMzdhOTM3MjNiOWMxOWI1YTlhYmI5ZjU0YmE0NQ==
Alors j'ai essayé d'utiliser une autre fonction (mentionné ici) et ce produit avec de l'encodage base64 ce:
NWY1ODUwOWE3NGI4NWU5ZTIxMDYzMTNmNzk3NTYxMDQ4OWE1MmUzNQ==
Je n'ai absolument aucune idée de comment je peux résoudre ce problème et je ne sais même pas pourquoi cela se produit.
Merci beaucoup pour l'aide,
Paul
- La sortie de
hash_hmac()
est un hex-string. Vous avez base64_encoded que hexstring, ce qui est probablement faux. Définir le 4ème paramètre à hash_hmac à la première vraie. - Merci. Je l'ai changé mais le résultat n'était pas vraiment différente (les clés et les secrets sont dynamiques donc il a changé un peu): N2ZmYWNlZjc2YjYwZGIzMzA0ZjBmMDhindhkmzuyntjhyjviyty1nw==
- Non, vous n'avez pas. C'est toujours un hexstring lors du décodage.
- Vous êtes un génie. J'ai changé la 3ème valeur de la fonction md5 de vrai parce que j'ai raté un support. Maintenant il fonctionne comme il est censé. Merci!!!! 🙂
- Faites-en une réponse, obtenir des points!
- Noël à la paresse. Aussi: vous avez seulement trois points de plus que moi! :}
Vous devez vous connecter pour publier un commentaire.
Ok, je vais ajouter une fausse réponse. (Sur Stackoverflow, chaque question doit être décoré par une réponse.)
Les fonctions de hachage en PHP surtout de retour de chaînes de caractères hexadécimaux, pas les données réelles. (Pour quelque raison que ce soit). Il est généralement un paramètre de fonction pour la rendre compatible à ce que d'autres implémentations attendre: