是否有 bash 脚本来生成 HMAC-SHA1散列?
HMAC-SHA1
我正在寻找与下面的 PHP 代码类似的东西:
hash_hmac("sha1", "value", "key");
我知道这不是你想要的,但是重造轮子和编写 bash 版本是没有意义的。
您可以简单地使用 openssl命令在脚本中生成散列。
openssl
[me@home] echo -n "value" | openssl dgst -sha1 -hmac "key" 57443a4c052350a44638835d64fd66822f813319
Or simply:
[me@home] echo -n "value" | openssl sha1 -hmac "key" 57443a4c052350a44638835d64fd66822f813319
请记住在 echo中使用 -n,否则字符串后面会附加一个换行符,这会改变数据和散列。
echo
-n
这个命令来自 OpenSSL 包,这个包应该已经安装(或者很容易安装)在您选择的 Linux/Unix、 Cygwin 等等中。
请注意,旧版本的 openssl(例如随 RHEL4一起提供的版本)可能不提供 -hmac选项。
-hmac
作为另一种解决方案,但主要是为了证明结果是相同的,我们还可以从命令行调用 PHP 的 hmac_sha1():
hmac_sha1()
[me@home]$ echo '<?= hash_hmac("sha1", "value", "key") ?>' | php 57443a4c052350a44638835d64fd66822f813319
下面是一个 bash 函数,它的工作方式与 PHP 中的 hash_hmac类似:
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 _ 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 的人: 很酷的 jwt bash 脚本
安装了 node.js 之后,你可以使用 HMAC-CLI工具:
npx hmac-cli generate 'value' -h sha1 -s key
报税表:
57443a4c052350a44638835d64fd66822f813319