2012-01-20 13 views
9

Próbuję wejść w interakcję z systemem komunikacji internetowej stron trzecich w czasie rzeczywistym utworzonym i administrowanym przez Pusher.com. Teraz nie mogę wysyłać niczego za pośrednictwem interfejsu API, chyba że przedstawię moje dane w postaci HMAC SHA256 hex digest. Kod źródłowy próbki napisany w ruby mogą próbować zilustrować następująco:HMAC SHA256 hex skrót ciągu w Erlang, jak?

 
# 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 

Sprawdziłem erlang crypto Library i nie mogę nawet wygenerować „bezpośrednio” SHA256 hex digest

Jak zrobić to całość w Erlang? pomóc ....

* UPDATE *

znalazłem rozwiązania tutaj: sha256 encryption in erlang i doprowadziły mnie do erlsha2. Ale nadal, jak mogę wygenerować HMAC z wyjścia z tego modułu?

Odpowiedz

11

Z erlsha2 należy stosować następujące dostać równowartość kodzie 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" 
+0

Świetnie! Wspaniały ! Wspaniały ! Wielkie dzięki @ Steve + Vinoski –

3

Właśnie natknąłem przez to sam i w końcu udało mi się to po prostu za pomocą krypto, więc myślałem, że chciałbym się podzielić. Za korzystanie myślę, że chcesz:

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

Część hmac powinien dbać o strawienia + HMAC i rurociągów do zakodowania 16 powinna dostarczyć część sześciokątną. Wyobrażam sobie, że prawdopodobnie przeprowadziłeś się jakiś czas temu, ale skoro po prostu miałem ten sam problem i chciałem spróbować go rozgryźć, pomyślałem, że się podzielę.