67
A
回答
135
我知道这不是你问什么了,但没有点重新发明轮子,写一个bash版。
您可以简单地使用openssl
命令生成脚本中的哈希值。
[[email protected]] echo -n "value" | openssl dgst -sha1 -hmac "key"
57443a4c052350a44638835d64fd66822f813319
或者干脆:
[[email protected]] echo -n "value" | openssl sha1 -hmac "key"
57443a4c052350a44638835d64fd66822f813319
记住使用-n
与echo
要不换行字符附加到字符串,并改变你的数据和散列。
这个命令来自哪个应该已经在你所选择的Linux/Unix,Cygwin和喜欢的安装(或易于安装)OpenSSL包。
请注意,旧版本的openssl
(例如RHEL4附带的版本)可能不提供-hmac
选项。
作为替代解决方案,但主要是为了证明,结果是一样的,我们也可以称之为PHP的hmac_sha1()
命令行:
[[email protected]]$ echo '<?= hash_hmac("sha1", "value", "key") ?>' | php
57443a4c052350a44638835d64fd66822f813319
30
这里是一个bash的功能就像hash_hmac
from PHP:
#!/bin/bash
function hash_hmac {
digest="$1"
data="$2"
key="$3"
shift 3
echo -n "$data" | openssl dgst "-$digest" -hmac "$key" "[email protected]"
}
# 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
感谢您的hash_hmac功能!但这对我的应用程序来说还不够。在任何人想知道的情况下,我必须使用之前哈希结果的密钥重新哈希几次,因此是二进制输入。 (亚马逊AWS认证签名这样的创建。)
我需要那么什么是供应以某种方式,不会破坏算法二进制键的方式。后来我发现这一点:http://openssl.6102.n7.nabble.com/command-line-hmac-with-key-in-hex-td6754.html
斯蒂芬·亨森的答复要求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不能正常工作......)
0
对于那些谁喜欢探索在命令行上更多的智威汤逊: 个cool jwt bash script
相关问题
- 1. bash的HMACSHA1代码到Ruby
- 2. HMACSHA1 SSL问题
- 3. base64 HmacSHA1解码在iPhone中
- 4. HMACSHA1给JS和VB.Net
- 5. HMACSHA1 off by 2 bytes
- 6. 从C#的HMACSHA1到PHP
- 7. C#vs Java HmacSHA1然后base64
- 8. 从objective-c到swift base64和hmacsha1
- 9. C#HMACSHA1哈希是不正确
- 10. Rails中的HMACSHA1 - 奇怪的结果
- 11. 互操作性:HMACSHA1用Java和DOTNET
- 12. 红宝石hmac-sha1不同于C#HMACSHA1
- 13. 如何在PHP中将hmacsha1键设置为十六进制?
- 14. 在node.js中生成与java相同的hmacSha1签名?
- 15. 如何在javascript中重新创建.net成员hmacsha1哈希
- 16. 如何在Java中基于此方法在python中为HmacSHA1算法生成Hash?
- 17. Twitter的OAuth的,JDK 8和java.security.NoSuchAlgorithmException:算法HMACSHA1不可
- 18. HMACSHA1 encrpyt不等于PHP和包装方法HMAC_SHA1价值
- 19. 是为零长度的消息定义的HMACSHA1?
- 20. 要使用CSOD(Cornerstone OnDemand)SOAP API,如何生成HMACSHA1签名?
- 21. hmacSha1Hex和hmacSha1之间有什么区别吗?
- 22. HMACSHA1 Android上侧和PHP侧产生不同
- 23. 我如何使用HMACSHA1哈希算法和beanshell在jmeter中生成签名
- 24. 尝试在Twitter上登录时无法获得HmacSHA1“消息验证码”(MAC)
- 25. hmacsha1在vb.net和python之间输出十六进制字符串不同
- 26. 在bash
- 27. 在bash
- 28. 在bash
- 29. 在bash
- 30. 在bash
OpenSSL的实现是很慢的。如果你偶尔需要这样做,那很好,但是如果你想要计算大量的哈希,你想调查不同的途径。 – Marcin
@Marcin:你可以引用一个来源吗? – sehe
[John The Ripper](http://www.openwall.com/john/)对于CPU实现非常快,而且它是开源的。 – Marcin