为什么更新 IntArray 时 crypto-js 输出中的更新与 NodeJS 的加密不同
Why does update in crypto-js output differ from NodeJS' crypto when updating IntArray
我正在尝试将使用 NodeJS crypto
的内容重构为使用 crypto-JS
的内容,但在更新哈希内容时我 运行 遇到了一些问题.
这是我要替换的原始哈希值:
const original_hash = crypto.createHash('sha512').update(someString).update(someIntArray).digest()
这里是使用 crypto-js
的新哈希:
const new_hash = CryptoJS.algo.SHA512.create().update(someString).update(someIntArray).finalize();
有谁知道为什么第二次更新会出现这样的差异? someIntArray
的一个例子是 Int8Array(6) [ 26, -50, -59, -118, -101, 33 ]
这是因为CryptoJS.update()
不支持Int8Array
作为输入,参见core.js#L561。
您可以将 Int8Array 转换为十六进制字符串,并使用 CryptoJS.enc.Hex.parse()
解析它。
const int8ArrayToHex = (int8Array) => {
// x << 24 >>> 24 converts int8 to uint8
return Array.from(int8Array).map(x => (x << 24 >>> 24).toString(16).padStart(2, '0')).join('')
}
let hex = int8ArrayToHex(new Int8Array([ 26, -50, -59, -118, -101, 33 ]))
console.log(hex) // 1acec58a9b21
const new_hash = CryptoJS.algo.SHA512.create().update(CryptoJS.enc.Hex.parse(hex)).finalize().toString()
console.log(new_hash) // 3c1d419bfcd4...
结果可以在这里验证:CyberChef: From Decimal -> SHA512
我正在尝试将使用 NodeJS crypto
的内容重构为使用 crypto-JS
的内容,但在更新哈希内容时我 运行 遇到了一些问题.
这是我要替换的原始哈希值:
const original_hash = crypto.createHash('sha512').update(someString).update(someIntArray).digest()
这里是使用 crypto-js
的新哈希:
const new_hash = CryptoJS.algo.SHA512.create().update(someString).update(someIntArray).finalize();
有谁知道为什么第二次更新会出现这样的差异? someIntArray
的一个例子是 Int8Array(6) [ 26, -50, -59, -118, -101, 33 ]
这是因为CryptoJS.update()
不支持Int8Array
作为输入,参见core.js#L561。
您可以将 Int8Array 转换为十六进制字符串,并使用 CryptoJS.enc.Hex.parse()
解析它。
const int8ArrayToHex = (int8Array) => {
// x << 24 >>> 24 converts int8 to uint8
return Array.from(int8Array).map(x => (x << 24 >>> 24).toString(16).padStart(2, '0')).join('')
}
let hex = int8ArrayToHex(new Int8Array([ 26, -50, -59, -118, -101, 33 ]))
console.log(hex) // 1acec58a9b21
const new_hash = CryptoJS.algo.SHA512.create().update(CryptoJS.enc.Hex.parse(hex)).finalize().toString()
console.log(new_hash) // 3c1d419bfcd4...
结果可以在这里验证:CyberChef: From Decimal -> SHA512