Получить Ruby OpenSSL :: HMAC.hexdigest () для вывода так же, как PHP hash_hmac () - PullRequest
2 голосов
/ 18 марта 2011

Я пытаюсь использовать API поставщика веб-услуг.У них нет примера в Ruby, но у них есть пример для PHP, и я пытаюсь их интерпретировать.Примеры API всегда используют «true» в вызове PHP hash_hmac (), который создает двоичный вывод.Кажется, что разница в том, что функция Ruby OpenSSL :: HMAC.hexdigest () всегда возвращает текст.(Если я изменяю вызов PHP на «false», они возвращают одно и то же значение.) Кто-нибудь знает способ «кодировать» текст, возвращенный из OpenSSL :: HMAC.hexdigest (), чтобы получить то же самое, что возвращено из hash_hmac('sha256', $ text, $ key, true)?

Ответы [ 2 ]

5 голосов
/ 18 марта 2011

Используйте OpenSSL::HMAC.digest, чтобы получить двоичный вывод.

1 голос
/ 18 марта 2011

Вам нужно будет преобразовать каждую пару шестнадцатеричных цифр в байт с одинаковым значением.Я не знаю никакого Ruby, но это похоже на то, как он будет обрабатываться в PHP.

Сначала возьмите строку шестнадцатеричных цифр и разбейте их на массив.Каждый элемент в массиве должен быть длиной два символа.Преобразуйте каждый элемент из строки из двух шестнадцатеричных байтов в целое число.Похоже, вы можете сделать это, вызвав метод hex для каждой строки.

Далее, вызовите pack для преобразованного массива с помощью параметра c*, чтобы преобразовать каждое целое число в однобайтовый символ.В результате вы должны получить правильную строку байтов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...