2012-01-20 14 views
9

Estoy tratando de interactuar con el sistema de mensajería web en tiempo real de terceros creado y mantenido por Pusher.com. Ahora, no puedo enviar nada a través de la API a menos que produzca un HMAC SHA256 hex digest de mis datos. Una muestra de código fuente escrito en ruby podría tratar de ilustrar esto:HMAC SHA256 hex digest de una cadena en Erlang, ¿cómo?

 
# 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 

he comprobado la erlang crypto Library y ni siquiera puede generar una SHA256 hex digest "directamente"

¿Cómo puedo hacer todo esto en Erlang? ayuda ....

* Actualización *

he encontrado soluciones aquí: sha256 encryption in erlang y me han llevado a erlsha2. Pero aún así, ¿cómo puedo generar el HMAC de una salida SHA256 hexdigest desde este módulo?

Respuesta

11

Con erlsha2, utilice el siguiente para obtener el equivalente de su código de 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

¡Genial! Excelente ! Excelente ! Muchas gracias @ Steve + Vinoski –

3

simplemente me topé a través de esto yo mismo y finalmente lo logré usando criptografía, así que pensé que lo compartiría. Para su uso Creo que usted quiere:

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

La parte hmac debe tener cuidado de digerir + hmac y luego tuberías para codificar 16 debe proporcionar la parte hexagonal. Me imagino que probablemente te mudaste hace un tiempo, pero ya que tenía el mismo problema y quería probarlo y resolverlo en cosas estándar, pensé que podría compartirlas.

Cuestiones relacionadas