是否有生成HMAC-SHA1哈希的bash脚本?
我正在寻找与以下PHP代码等效的东西:
hash_hmac("sha1", "value", "key");
Run Code Online (Sandbox Code Playgroud)
Sha*_*hin 168
我意识到这并不是你所要求的,但重新发明轮子和编写bash版本毫无意义.
您只需使用该openssl命令在脚本中生成哈希.
[me@home] echo -n "value" | openssl dgst -sha1 -hmac "key"
57443a4c052350a44638835d64fd66822f813319
Run Code Online (Sandbox Code Playgroud)
或者干脆:
[me@home] echo -n "value" | openssl sha1 -hmac "key"
57443a4c052350a44638835d64fd66822f813319
Run Code Online (Sandbox Code Playgroud)
请记住使用-nwith echo,否则会在字符串后附加换行符,从而更改数据和散列.
该命令来自OpenSSL软件包,该软件包应该已经安装(或轻松安装)在您选择的Linux/Unix,Cygwin等中.
请注意,旧版本openssl(例如RHEL4附带的版本)可能不提供该-hmac选项.
作为替代解决方案,但主要是为了证明结果是一样的,我们也可以hmac_sha1()从命令行调用PHP :
[me@home]$ echo '<?= hash_hmac("sha1", "value", "key") ?>' | php
57443a4c052350a44638835d64fd66822f813319
Run Code Online (Sandbox Code Playgroud)
Mar*_*tin 39
这是一个像hash_hmacPHP 一样工作的bash函数:
#!/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"
Run Code Online (Sandbox Code Playgroud)
感谢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/^.* //'
Run Code Online (Sandbox Code Playgroud)
然后下一个调用需要提供密钥作为一个hexit:
$ echo -n "$data" | openssl dgst "-$digest" -mac HMAC -macopt "hexkey:$key" | sed -e 's/^.* //'
Run Code Online (Sandbox Code Playgroud)
希望这有助于任何人,可能是那些试图创建bash脚本以使AWS上的CloudFront条目无效的人(像我一样!)(我还没有测试过,但我认为这就是为什么我的bash脚本的原因不起作用,我的PHP一个...)