Одинаковые коды на PHP и Ruby дают разные результаты - PullRequest
1 голос
/ 27 июня 2019

Я пытаюсь реализовать вычисление подписи, используя пример, написанный на PHP.Но эти коды возвращают другой результат.

Пример PHP:

base64_encode(hash_hmac('sha384', $message, trim($key), true))

Код Ruby:

hmac_hash = OpenSSL::HMAC.hexdigest("SHA384", key, message)
signature = Base64.encode64(hmac_hash)

Вот переменная сообщения JSON.

1 Ответ

2 голосов
/ 27 июня 2019

OpenSSL::HMAC.hexdigest в Ruby выводит шестнадцатеричную строку, и это то, что вы кодируете с помощью base64.В вашем PHP-коде параметр true для hash_hmac позволяет выводить необработанные двоичные данные.Без этого это был бы шестнадцатеричный код, который, я думаю, привел бы к тому же, что и Ruby.

Так что вам нужно либо удалить параметр true в коде PHP, чтобы закодировать шестнадцатеричное представление вPHP или используйте OpenSSL::HMAC.digest в Ruby для кодирования необработанных двоичных данных в Ruby.

Также у вас есть ключ trim() в PHP, но нет .strip в Ruby, но я неНе думаю, что это проблема.

...