是否有bash脚本生成HMAC-SHA1
哈希?
我正在寻找与以下PHP代码等效的东西:
hash_hmac("sha1", "value", "key");
答案 0 :(得分:163)
我意识到这并不是你所要求的,但重新发明轮子和编写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
一起使用,否则会在字符串后附加换行符,这会更改您的数据和散列。
该命令来自OpenSSL软件包,该软件包应该已经安装(或轻松安装)在您选择的Linux / Unix,Cygwin等中。
请注意,openssl
的旧版本(例如RHEL4附带的版本)可能不提供-hmac
选项。
作为替代解决方案,但主要是为了证明结果相同,我们也可以从命令行调用PHP的hmac_sha1()
:
[me@home]$ echo '<?= hash_hmac("sha1", "value", "key") ?>' | php
57443a4c052350a44638835d64fd66822f813319
答案 1 :(得分:38)
这是一个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"
答案 2 :(得分:6)
感谢hash_hmac函数!但这对我的申请来说还不够。如果有人想知道,我不得不使用之前哈希结果的密钥重新哈希几次,因此是二进制输入。 (Amazon AWS身份验证签名就是这样创建的。)
所以我需要的是一种以某种方式提供二进制密钥的方法,这种方式不会破坏算法。然后我发现了这个:http://openssl.6102.n7.nabble.com/command-line-hmac-with-key-in-hex-td6754.html
Stephen Henson的回复要求hash_hmac函数以十六进制格式返回值。所以它需要回应以下内容:
$ 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/^.* //'
希望这可以帮助任何人,可能是那些尝试创建bash脚本以使AWS上的CloudFront条目无效的人(像我一样!)(我还没有对其进行测试,但我认为这就是原因所在为什么我的bash脚本不起作用,我的PHP脚本... ...
答案 3 :(得分:0)
对于那些喜欢在命令行上探索更多JWT的人: cool jwt bash script
答案 4 :(得分:0)
已安装node.js,可以使用HMAC-CLI工具:
npx hmac-cli generate 'value' -h sha1 -s key
返回:
57443a4c052350a44638835d64fd66822f813319