Answers:
我意识到这并不是您所要的,但是重新发明轮子并编写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软件包。
请注意,较旧的版本openssl
(例如RHEL4附带的版本)可能不提供该-hmac
选项。
作为一种替代解决方案,但主要是为了证明结果相同,我们还可以hmac_sha1()
从命令行调用PHP :
[me@home]$ echo '<?= hash_hmac("sha1", "value", "key") ?>' | php
57443a4c052350a44638835d64fd66822f813319
sha1
替换为sha256
:-)
openssl genrsa
吗?此外,OpenSSL文档链接导致404
这是一个bash函数,类似于hash_hmac
PHP:
#!/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_hmac "sha1" "$(cat your-json-file)" "key"
。另外,您也可以openssl dgst
不使用此hash_hmac
功能就通过管道传输文件。
感谢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/^.* //'
然后,下一个调用将需要提供密钥作为十六进制:
$ echo -n "$data" | openssl dgst "-$digest" -mac HMAC -macopt "hexkey:$key" | sed -e 's/^.* //'
希望这对任何人都有帮助,可能是尝试创建bash脚本以使AWS上的CloudFront条目无效的人(像我一样!)(我尚未对其进行测试,但是我认为这就是为什么我的bash脚本的原因不起作用,我的PHP可以...)
对于那些喜欢在命令行上探索更多JWT的人: cool jwt bash脚本