2012-01-20 23 views
9

Sto tentando di interagire con il sistema di messaggistica in tempo reale di terze parti creato e gestito da Pusher.com. Ora, non posso inviare nulla tramite l'API a meno che non produca uno dei miei dati. Un codice sorgente di esempio scritto in ruby potrebbe tentare di illustrare questo:HMAC SHA256 digest esadecimale di una stringa in Erlang, come?

 
# 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 

ho controllato il erlang crypto Library e non riesco nemmeno a generare un SHA256 hex digest "direttamente"

Come faccio a fare tutta questa cosa in Erlang? aiuto ....

* UPDATE * soluzioni

ho trovato qui: sha256 encryption in erlang e loro mi hanno portato a erlsha2. Ma ancora, come faccio a generare il HMAC di un output SHA256 hexdigest da questo modulo?

risposta

11

Con erlsha2, utilizzare il seguente per ottenere l'equivalente del codice 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

Ottimo! Grande ! Grande ! Grazie mille @ Steve + Vinoski –

3

Ho appena imbattuto attraverso questo me stesso e finalmente gestito semplicemente usando la crittografia, quindi pensavo di condividere. Per l'uso Penso che si vorrebbe:

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

La porzione hmac dovrebbe prendersi cura di digerire + hmac e quindi tubazioni per codificare 16 dovrebbe fornire la parte esagonale. Immagino che probabilmente ti sei trasferito qualche tempo fa, ma visto che ho avuto lo stesso problema e ho voluto provare a capirlo in stdlib ho pensato di condividerlo.

Problemi correlati