gpt4 book ai didi

javascript - jsSHA、CryptoJS 和 OpenSSL 库给出不同的结果

转载 作者:数据小太阳 更新时间:2023-10-29 06:07:30 24 4
gpt4 key购买 nike

刚接触 JS,我也在学习使用加密库。我不明白为什么使用相同的 secret 对相同的消息进行签名/编码会产生不同的结果。

我正在使用 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;

你能帮我解释一下为什么这些结果不同吗?

crypto answer is 3e929e69920fb7d423f816bfcd6654484f1f6d56= jssha answer is 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

(很想提供一个 fiddle ,这似乎是一种非常好的常见做法,但这对我来说也是新的,我无法找到一个解决这个问题的人)。

提前致谢。

最佳答案

您的代码中有 3 个错误 :)

您缺少 crypto-jsenc-base64-min.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;

Example

关于javascript - jsSHA、CryptoJS 和 OpenSSL 库给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13671632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com