【发布时间】:2012-11-20 05:35:31
【问题描述】:
JS 新手,我也在学习使用加密库。我不明白为什么用相同的秘密对相同的消息进行签名/编码会产生不同的结果。
我正在使用jsSHA 1.3.1 found here 和CryptoJS 3.0.2 described here 尝试创建base64 sha-1 编码的hmac 签名。代码如下:
在html中...
<script src="lib/jsSHA/src/sha1.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/rollups/hmac-sha1.js"></script>
在 js 中...
var message = "shah me";
var secret = "hide me";
var crypto = CryptoJS.HmacSHA1(message, secret).toString(CryptoJS.enc.Base64) + '=';
var shaObj = new jsSHA(message, "ASCII");
var jssha = shaObj.getHMAC(secret, "ASCII", "B64") + '=';
return "crypto answer is " + crypto + " jssha answer is " + jssha;
你能帮我解释一下为什么这些结果不同吗?
加密答案是 3e929e69920fb7d423f816bfcd6654484f1f6d56= jssha 答案是 PpKeaZIPt9Qj+Ba/zWZUSE8fbVY=
更重要的是,这两者都与我在 rails 中生成的签名不同,就像这样......
digest = OpenSSL::Digest::Digest.new('sha1')
raw_signature = OpenSSL::HMAC.digest(digest, "hide me","shah me")
b64_signature = Base64.encode64(raw_signature).strip
(本来想提供一个小提琴,这似乎是一种非常好的常见做法,但这对我来说也是新的,我无法找到一个为这个问题工作的人)。
提前致谢。
【问题讨论】:
标签: javascript cryptography sha1 hmac