HMAC-SHA1在bash中

是否有一个生成HMAC-SHA1哈希的bash脚本?

我正在寻找相当于以下PHP代码的东西:

 hash_hmac("sha1", "value", "key"); 

我意识到这不完全是你要求的,但重新发明轮子和写一个bash版本是没有意义的。

您可以简单地使用openssl命令在您的脚本中生成散列。

 [me@home] echo -n "value" | openssl dgst -sha1 -hmac "key" 57443a4c052350a44638835d64fd66822f813319 

或者干脆:

 [me@home] echo -n "value" | openssl sha1 -hmac "key" 57443a4c052350a44638835d64fd66822f813319 

请记住使用-necho ,否则会将一个换行符附加到string,并更改您的数据和散列。

这个命令来自OpenSSL包,应该已经安装(或容易安装)在你select的Linux / Unix,Cygwin等等。

请注意,旧版本的openssl (例如RHEL4附带的版本)可能不提供-hmac选项。


作为另一种解决scheme,但主要是为了certificate结果是相同的,我们也可以从命令行调用PHP的hmac_sha1()

 [me@home]$ echo '<?= hash_hmac("sha1", "value", "key") ?>' | php 57443a4c052350a44638835d64fd66822f813319 

这里是一个bash函数,像PHP中的hash_hmac一样工作:

 #!/bin/bash function hash_hmac { digest="$1" data="$2" key="$3" shift 3 echo -n "$data" | openssl dgst "-$digest" -hmac "$key" "$@" } # hex output by default hash_hmac "sha1" "value" "key" # raw output by adding the "-binary" flag hash_hmac "sha1" "value" "key" -binary | base64 # other algos also work hash_hmac "md5" "value" "key" 

感谢hash_hmacfunction! 但是我的申请还不够 在任何人想知道的情况下,我必须使用之前散列结果的键重复散列几次,因此是二进制input。 (Amazon AWSauthentication签名是这样创build的。)

所以我需要的是以某种不会破坏algorithm的方式提供二进制密钥的方法。 然后我发现这个: http : //openssl.6102.n7.nabble.com/command-line-hmac-with-key-in-hex-td6754.html

Stephen Henson的回复要求hash_hmac函数以hex格式返回值。 所以需要回显以下内容:

 $ echo -n "$data" | openssl dgst "-$digest" -hmac "$key" | sed -e 's/^.* //' 

然后下一个电话将需要提供密钥作为hexit:

 $ echo -n "$data" | openssl dgst "-$digest" -mac HMAC -macopt "hexkey:$key" | sed -e 's/^.* //' 

希望这有助于任何人,可能是谁试图创buildbash脚本来使AWS上的CloudFront条目失效(像我一样)(我还没有testing过,但我认为这是事情的原因是我的bash脚本不工作,我的PHP一个…)

对于那些喜欢在命令行上探索更多JWT的人: 酷酷的jwt bash脚本