2012-01-20 50 views
9

我正在嘗試與第三方實時Web消息傳遞系統進行交互,該系統由​​創建和維護。現在,除非我生成我的數據的HMAC SHA256 hex digest,否則我無法通過API發送任何內容。寫在ruby一個示例源代碼可以嘗試來說明這一點:HMAC SHA256十六進制字符串在Erlang中的摘要,怎麼樣?

 
# 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 crypto Library,我甚至不能產生SHA256 hex digest「直接」

我如何用Erlang做這件事?幫助....

* UPDATE *

我已經找到解決方案在這裏:sha256 encryption in erlang,他們促使我erlsha2。但是,如何從模塊中產生SHA256 hexdigest輸出的HMAC

回答

11

隨着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" 
+0

太棒了!太好了!太好了!非常感謝Steve + Vinoski –

3

我只是偶然通過這個我自己,並最終管理它只是使用加密,所以認爲我會分享。爲了您的使用情況,我認爲你會想:

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

的HMAC部分應該照顧消化+ HMAC,然後輸送至編碼16應提供六角部分。我想你可能在前一段時間移動了,但因爲我剛剛有同樣的問題,並想嘗試找出stdlib的東西,我想我會分享。

相關問題