Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript获取Hmac代码_Javascript_Jquery_Hmac_Sha512 - Fatal编程技术网

如何使用javascript获取Hmac代码

如何使用javascript获取Hmac代码,javascript,jquery,hmac,sha512,Javascript,Jquery,Hmac,Sha512,我可以使用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

我可以使用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,我可以得到十六进制的摘要符号,但是我需要为web请求得到正确的符号

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="
正确符号为正确符号:LG4PXNCIPTNQT2DLU19QWB+FXDSYZLK4LLNCFKTZIDRYOFJLNOLUZIRQH09B5HYRDCTEP7ENZP6/Te34FK1g==

correct_sign: Lg4pXNCIpitNQt2DLU19qWb+FxdsYZlK4LLncfkTzSidrYoFJLNolUziRqh09B5HyRdCTEP7enZp6/Te34FK1g==
如何在js中获得它?

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

这样,一旦你去打印结果,你就可以打印WordArray的内容了

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

function hmac_512(message, secret) {
var newHMAC = CryptoJS.HmacSHA256(message, secret);
    return newHMAC;
}
上面将简单地以字符串形式返回HMAC,一旦对其进行Base64编码,它应该与您在Python中看到的结果相匹配

例如,您可以查看我的使用cryptoJS HMAC的Google驱动器加密服务

希望这有帮助