gpt4 book ai didi

javascript - 如何使用javascript获取Hmac代码

转载 作者:行者123 更新时间:2023-11-30 06:31:42 26 4
gpt4 key购买 nike

我可以使用 Python 获取 hmac sing,如下所示:

import hmac, base64, hashlib

def make_sign():
hash_data = "data"
secret = "this is secret"
sha512 = hashlib.sha512
hmac_obj = hmac.new(secret, hash_data, sha512)
str_hash = hmac_obj.digest()
sign = base64.b64encode(str_hash)
hex_hash = hmac_obj.hexdigest()
hex_sign = base64.b64encode(hex_hash)
print "correct_sign:",sign
print "hex_digest_sign:",hex_sign
make_sign()

输出:

correct_sign: Lg4pXNCIpitNQt2DLU19qWb+FxdsYZlK4LLncfkTzSidrYoFJLNolUziRqh09B5HyRdCTEP7enZp6/Te34FK1g==
hex_digest_sign: MmUwZTI5NWNkMDg4YTYyYjRkNDJkZDgzMmQ0ZDdkYTk2NmZlMTcxNzZjNjE5OTRhZTBiMmU3NzFmOTEzY2QyODlkYWQ4YTA1MjRiMzY4OTU0Y2UyNDZhODc0ZjQxZTQ3YzkxNzQyNGM0M2ZiN2E3NjY5ZWJmNGRlZGY4MTRhZDY=

但是使用js,我可以获得hex_digest_sign,但是我需要为web请求获取correct_sign。

function make_request() {
hash_data = "data"
secret = "this is secret"
hmac = hmac_512(hash_data, secret)
var sign = $.base64.encode(hmac),
console.log("js_sign="+sign);
}

function hmac_512(message, secret) {
var hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA512, secret);
hmac.update(message);
var hash = hmac.finalize();
return hash;
}

js输出:

js_sign="MmUwZTI5NWNkMDg4YTYyYjRkNDJkZDgzMmQ0ZDdkYTk2NmZlMTcxNzZjNjE5OTRhZTBiMmU3NzFmOTEzY2QyODlkYWQ4YTA1MjRiMzY4OTU0Y2UyNDZhODc0ZjQxZTQ3YzkxNzQyNGM0M2ZiN2E3NjY5ZWJmNGRlZGY4MTRhZDY="

正确的符号是

correct_sign: Lg4pXNCIpitNQt2DLU19qWb+FxdsYZlK4LLncfkTzSidrYoFJLNolUziRqh09B5HyRdCTEP7enZp6/Te34FK1g==

如何在js中获取?

最佳答案

我怀疑您在类型和编码方面遇到了麻烦。根据CryptoJS source ,一旦您调用 finalize(),您使用的迭代哈希样式将返回一个 WordArray

有了它,一旦您去打印结果,您就是在打印 WordArray 的内容。

迭代散列的目的通常是,如果您有大量输入,您可以将其分成 block 以便一次处理一个部分。尝试我所做的以下编辑,删除它,因为它看起来不需要迭代。

function hmac_512(message, secret) {
var newHMAC = CryptoJS.HmacSHA256(message, secret);
return newHMAC;
}

以上将简单地返回字符串形式的 HMAC,一旦 Base64 编码,它应该与您在 Python 中看到的结果匹配。

希望这对您有所帮助!

关于javascript - 如何使用javascript获取Hmac代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17131704/

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