dan*_*anh 5 javascript cryptography sha1 hmac
JS的新手,我也学习使用加密库.我不明白为什么使用相同的秘密签署/编码相同的消息会产生不同的结果.
我使用jsSHA 1.3.1这里找到,而这里所描述CryptoJS 3.0.2试图建立一个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>
Run Code Online (Sandbox Code Playgroud)
在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;
Run Code Online (Sandbox Code Playgroud)
你能帮我解释一下这些结果有何不同吗?
加密答案是3e929e69920fb7d423f816bfcd6654484f1f6d56 = jssha答案是PpKeaZIPt9Qj + Ba/zWZUSE8fbVY =
更重要的是,这两者都与我在轨道中生成的签名不同,就像这样......
digest = OpenSSL::Digest::Digest.new('sha1')
raw_signature = OpenSSL::HMAC.digest(digest, "hide me","shah me")
b64_signature = Base64.encode64(raw_signature).strip
Run Code Online (Sandbox Code Playgroud)
(本来希望提供一个小提琴,这似乎是一个非常好的常见做法,但这对我来说也是新的,我无法让一个人为这个问题工作).
提前致谢.
您的代码中有3个错误:)
你错过enc-base64-min.js
了crypto-js
.没有它,CryptoJS.enc.Base64
将会undefined
在调用时丢失一个参数.getHMAC()
.这是.getHMAC(secret, secret_type, hash_type, output_encoding)
1 + 2添加a =
是不必要的(也不是正确的)
<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>
<script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/components/enc-base64-min.js"></script>
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", "SHA-1", "B64");
return "crypto answer is " + crypto + " jssha answer is " + jssha;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6147 次 |
最近记录: |