Как заставить PHP создать строки HMAC-SHA1, такие как Objective-C?
-
12-10-2019 - |
Вопрос
Я пытаюсь реализовать решение аутентификации с помощью PHP и Objective-C. Оба языка создают свои собственные кодированные строки HMAC-SHA1 с одним и тем же ключом и с одним и тем же секретом.
Видимо, они, кажется, отличаются по своему пути, как они это делают.
На стороне Objective-C я использую Oauthcustomer в качестве класса подписания, который создает правильную кодируемую строку:
/3n/d4sKN6k3I7nBm1qau59UukU=
На стороне PHP я использую встроенную функцию hash_hmac ('sha1', ...) с кодированием Base64, которая создает это:
ZmY3OWZmNzc4YjBhMzdhOTM3MjNiOWMxOWI1YTlhYmI5ZjU0YmE0NQ==
Тогда я попытался использовать другую функцию (упомянутая здесь) и это производит с кодированием BASE64 это:
NWY1ODUwOWE3NGI4NWU5ZTIxMDYzMTNmNzk3NTYxMDQ4OWE1MmUzNQ==
Я абсолютно понятия не имею, как я могу решить эту проблему, и я даже не знаю, почему это происходит.
Спасибо за помощь,
Павел
Решение
Хорошо, я добавлю искусственный ответ. (На Stackoverflow каждый вопрос должен быть украшен ответом.)
Хэш-функции в PHP в основном возвращают шестигранные строки, а не реальные данные. (Для любой причины). Обычно существует параметр функции, чтобы сделать его совместимым с тем, что ожидают другие реализации:
hash_hmac("sha1", $data, $key, $raw_output=TRUE);
md5($str, $raw_output=TRUE);
hash("sha1", $data, $raw_output=TRUE);