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
请记住使用-n
和echo
,否则会将一个换行符附加到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脚本