首页 文章

在Erlang中HMAC SHA256十六进制字符串摘要,怎么样?

提问于
浏览
9

我正在尝试与 Pusher.com 创建和维护的第三方实时Web消息系统进行交互 . 现在,我无法通过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 crypto Library ,我甚至无法生成 SHA256 hex digest "directly"

How do i do this whole thing in Erlang ? 帮助......

*** UPDATE ***

我在这里找到了解决方案:sha256 encryption in erlang他们带我去了 erlsha2 . 但是,如何从此模块生成 SHA256 hexdigest 输出的 HMAC

3 回答

  • 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"
    
  • 3

    同一个项目(erlsha2)有一个模块:

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

  • 3

    我自己偶然发现了这个并最终使用加密管理它,所以我想我会分享 . 对于您的使用我认为您会想要:

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

    hmac部分应该处理digest hmac,然后管道编码16应该提供hex部分 . 我想你可能在前一段时间了,但是因为我只是遇到了同样的问题,并想尝试在stdlib中找到它,我以为我会分享 .

相关问题