我试图用JavaScript重现Python的hashlib.sha256
。但是,产生的散列是不同的
在Python中,哈希计算正确:
In [1]: import hashlib
...: from binascii import unhexlify
In [2]: a = "56687282f0f3c1ca76132c6c2fee44ee93a0b3251740719ea3e33b8366d86615"
In [3]: hashlib.sha256(unhexlify(a)).hexdigest()
Out[3]: 'd7928286f70bf6f89802d9b13bed2aae9c65609133dcd37ae03345b4ee2e8731'
在JavaScript中使用CryptoJS库:
var a = "56687282f0f3c1ca76132c6c2fee44ee93a0b3251740719ea3e33b8366d86615";
for (var bytes = [], c = 0; c < a.length; c += 2){
bytes.push(parseInt(a.substr(c, 2), 16));
}
CryptoJS.SHA256(bytes).toString();
"4ea5c508a6566e76240543f8feb06fd457777be39549c4016436afda65d2330e"
由于JavaScript的bytes
和Python的unhexlify(a)
是相同的,因此CryptoJS.SHA256
似乎产生了不同的散列
JavaScript中的哪个SHA256函数与哈希字节数组兼容
问题不在于
CryptoJS.SHA256
,而在于Javascript中从十六进制到字节的转换方式CryptoJS提供了一种适用于您的示例的
CryptoJS.enc.Hex.parse()
(doc)方法:代码中的错误假设是数字数组是散列的有效输入。 实际上,CryptoJS输入should be of type WordArray。它们看起来是这样的:
相关问题 更多 >
编程相关推荐