rem*_*its 6 javascript jquery hmac sha512
我可以使用 Python 获得 hmac 唱歌,如下所示:
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()
Run Code Online (Sandbox Code Playgroud)
输出:
correct_sign: Lg4pXNCIpitNQt2DLU19qWb+FxdsYZlK4LLncfkTzSidrYoFJLNolUziRqh09B5HyRdCTEP7enZp6/Te34FK1g==
hex_digest_sign: MmUwZTI5NWNkMDg4YTYyYjRkNDJkZDgzMmQ0ZDdkYTk2NmZlMTcxNzZjNjE5OTRhZTBiMmU3NzFmOTEzY2QyODlkYWQ4YTA1MjRiMzY4OTU0Y2UyNDZhODc0ZjQxZTQ3YzkxNzQyNGM0M2ZiN2E3NjY5ZWJmNGRlZGY4MTRhZDY=
Run Code Online (Sandbox Code Playgroud)
但是使用 js,我可以获得 hex_digest_sign,但我需要为 web 请求获取正确的_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;
}
Run Code Online (Sandbox Code Playgroud)
js输出:
js_sign="MmUwZTI5NWNkMDg4YTYyYjRkNDJkZDgzMmQ0ZDdkYTk2NmZlMTcxNzZjNjE5OTRhZTBiMmU3NzFmOTEzY2QyODlkYWQ4YTA1MjRiMzY4OTU0Y2UyNDZhODc0ZjQxZTQ3YzkxNzQyNGM0M2ZiN2E3NjY5ZWJmNGRlZGY4MTRhZDY="
Run Code Online (Sandbox Code Playgroud)
正确的符号是
正确符号:Lg4pXNCIpitNQt2DLU19qWb+FxdsYZlK4LLncfkTzSidrYoFJLNolUziRqh09B5HyRdCTEP7enZp6/Te34FK1g==
如何在js中获取它?
小智 4
我怀疑您在类型和编码方面遇到了麻烦。根据CryptoJS 来源,一旦您调用Finalize() ,您使用的迭代哈希样式将返回一个WordArray。
这样,一旦您打印结果,您就打印了WordArray的内容。
迭代散列的目的通常是,如果您有大量输入,则可以将其分成多个块,以便一次处理一个部分。尝试下面我所做的编辑,删除它,因为它看起来不需要迭代。
function hmac_512(message, secret) {
var newHMAC = CryptoJS.HmacSHA256(message, secret);
return newHMAC;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码将简单地以字符串形式返回 HMAC,经过 Base64 编码后,它应该与您在 Python 中看到的结果相匹配。
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
11149 次 |
| 最近记录: |