Как заставить PHP создавать строки HMAC-SHA1, такие как Objective-C? - PullRequest
7 голосов
/ 24 декабря 2010

Я пытаюсь реализовать решение для аутентификации с помощью PHP и Objective-C. Оба языка создают свои собственные строки в кодировке HMAC-SHA1 с одним и тем же ключом и одним и тем же секретом.

По-видимому, они, похоже, различаются в том, как они это делают.

На стороне Objective-C я использую OAuthCustomer в качестве класса подписи, который создает правильно выглядящую закодированную строку:

/3n/d4sKN6k3I7nBm1qau59UukU=

На стороне PHP я использую встроенную функцию hash_hmac ('sha1', ...) с кодировкой base64, которая производит это:

ZmY3OWZmNzc4YjBhMzdhOTM3MjNiOWMxOWI1YTlhYmI5ZjU0YmE0NQ==

Затем я попытался использовать другую функцию (упомянутую здесь ), и это приводит к кодированию base64:

NWY1ODUwOWE3NGI4NWU5ZTIxMDYzMTNmNzk3NTYxMDQ4OWE1MmUzNQ==

Я понятия не имею, как я могу решить эту проблему, и я даже не знаю, почему это происходит.

Спасибо большое за помощь,

Пол

1 Ответ

22 голосов
/ 25 декабря 2010

Хорошо, я добавлю ложный ответ. (В Stackoverflow каждый вопрос должен быть оформлен ответом.)

Хеш-функции в PHP в основном возвращают шестнадцатеричные строки, а не реальные данные. (Для любой причины). Обычно есть параметр функции, чтобы сделать его совместимым с ожиданиями других реализаций:

 hash_hmac("sha1", $data, $key, $raw_output=TRUE);

 md5($str, $raw_output=TRUE);

 hash("sha1", $data, $raw_output=TRUE);
...