jsSHA,CryptoJS和OpenSSL库给出不同的结果(jsSHA, CryptoJS and

2019-07-04 09:21发布

新来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>

而在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 =

更重要的是,这两个与我生成的护栏,这样的签名不同...

digest  = OpenSSL::Digest::Digest.new('sha1')
raw_signature = OpenSSL::HMAC.digest(digest, "hide me","shah me")
b64_signature = Base64.encode64(raw_signature).strip

(本来希望提供一个小提琴,这似乎是一个很好的普遍做法,但也为新的给我,我无法得到这个问题的一个工作)。

提前致谢。

Answer 1:

有在你的代码3个错误:)

你缺少enc-base64-min.js用于crypto-js 。 没有它, CryptoJS.enc.Base64将是undefined
你打电话时缺少一个参数.getHMAC() 这是.getHMAC(secret, secret_type, hash_type, output_encoding)
用1 + 2加入=没有必要(也不右)

<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;



文章来源: jsSHA, CryptoJS and OpenSSL libraries giving different results