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

wlzqhblo  于 2022-12-16  发布在  Erlang
关注(0)|答案(5)|浏览(227)

我正在尝试与由**Pusher.com**创建和维护的第三方真实的Web消息传递系统交互。现在,除非生成数据的HMAC SHA256 hex digest,否则无法通过API发送任何内容。用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

**我如何在Erlang中完成这整件事?**帮助....
更新

我在这里找到了解决方案:sha256 encryption in erlang,它们将我引导到**erlsha2**。但是,如何从该模块生成SHA256 hexdigest输出的HMAC

vlju58qv

vlju58qv1#

对于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"
siv3szwd

siv3szwd2#

我只是偶然通过这个自己,并最终管理它只是使用加密,所以我想我会分享。对于您的使用,我想你会想要:
:crypto.hmac(:sha256, secret, string_to_sign) |> Base.encode16
HMAC部分应该处理摘要+ HMAC,然后到编码器16的管道应该提供十六进制部分。我想你可能在一段时间前就离开了,但由于我刚刚有同样的问题,并希望尝试和弄清楚它在stdlib的东西,我想我会分享。

mmvthczy

mmvthczy4#

如果你在用** Elixir **,你可以用

:crypto.hash(:sha256, [secret, string_to_sign]) 
|> Base.encode16 
|> String.downcase
dm7nw8vv

dm7nw8vv5#

这是一个一行程序(Erlang 24):

[begin if N < 10 -> 48 + N; true -> 87 + N end end ||
            <<N:4>> <= crypto:mac(hmac, sha256, Secret1, StringToSign1)].

>>> "309fc4be20f04e53e011b00744642d3fe66c2c7c5686f35ed6cd2af6f202e445"

不需要外部库。

相关问题