HMAC SHA256 шестнадцатеричный дайджест строки в Erlang, как? - PullRequest
9 голосов
/ 20 января 2012

Я пытаюсь взаимодействовать со сторонней системой обмена сообщениями в режиме реального времени, созданной и поддерживаемой Pusher.com . Теперь я не могу ничего посылать через API, если я не создаю HMAC SHA256 hex digest моих данных. Пример исходного кода, написанного на ruby, может попытаться проиллюстрировать это:

# Dependencies
# gem install ruby-hmac
#
require 'rubygems'
require 'hmac-sha2'

secret = '7ad3773142a6692b25b8'
string_to_sign = "POST\n/apps/3/channels/test_channel/events\nauth_key=278d425bdf160c739803&auth_timestamp=1272044395&auth_version=1.0&body_md5=7b3d404f5cde4a0b9b8fb4789a0098cb&name=foo"

hmac = HMAC::SHA256.hexdigest(secret, string_to_sign)

puts hmac
# >> 309fc4be20f04e53e011b00744642d3fe66c2c7c5686f35ed6cd2af6f202e445

Я проверил криптографическую библиотеку erlang и даже не могу сгенерировать SHA256 hex digest "напрямую"

Как мне все это сделать в Эрланге? помогите ....

* ОБНОВЛЕНИЕ *

Я нашел решения здесь: sha256 шифрование на эрланге , и они привели меня к erlsha2 . Но все же, как мне сгенерировать HMAC из SHA256 hexdigest выходных данных из этого модуля?

Ответы [ 3 ]

11 голосов
/ 21 января 2012

С erlsha2 используйте следующее, чтобы получить эквивалент вашего кода Ruby:

1> hmac:hexlify(hmac:hmac256(<<"7ad3773142a6692b25b8">>, <<"POST\n/apps/3/channels/test_channel/events\nauth_key=278d425bdf160c739803&auth_timestamp=1272044395&auth_version=1.0&body_md5=7b3d404f5cde4a0b9b8fb4789a0098cb&name=foo">>)).
"309FC4BE20F04E53E011B00744642D3FE66C2C7C5686F35ED6CD2AF6F202E445"
4 голосов
/ 19 ноября 2014

Я просто наткнулся на это сам и, наконец, справился с этим, просто используя криптографию, так что подумал, что поделюсь.Для вашего использования, я думаю, вы захотите:

:crypto.hmac(:sha256, secret, string_to_sign) |> Base.encode16

Часть hmac должна позаботиться о digest + hmac, а затем конвейер для кодирования 16 должен обеспечить шестнадцатеричную часть.Я предполагаю, что вы, вероятно, перешли некоторое время назад, но, поскольку у меня просто была та же проблема, и я хотел попытаться разобраться с ней в stdlib, я подумал, что поделюсь.

3 голосов
/ 20 января 2012

В том же проекте (erlsha2) есть модуль для этого:

https://github.com/vinoski/erlsha2/blob/master/src/hmac.erl

...