Crypto-js / sha256总是返回相同的结果,即使尝试使用其他对象创建哈希也是如此。如何解决这个问题呢?谢谢
const sha256 = require('crypto-js/sha256')
const data1 = {
data: 2,
name: 'name 1'
}
const data2 = {
name: 'name 2'
}
const a = sha256(data1).toString()
const b = sha256(data2).toString()
console.log(a) // 4ea5c508a6566e76240543f8feb06fd457777be39549c4016436afda65d2330e
console.log(b) // 4ea5c508a6566e76240543f8feb06fd457777be39549c4016436afda65d2330e
首先,如果您查看方法sha256的参数,您会发现它仅接受字符串或WordArray(类型为CryptoJS.LibWordArray)。
因此,如果您传递一个字符串,它将被转换为WordArray(包含两个元素;单词和sigBytes,否则就假定为WordArray。
这里的问题是,当您传递对象作为参数(不是WordArray类型的对象)时,无论其内容如何,它将被转换为“ {单词:[],sigBytes:NaN}”,然后您将始终相同的结果。
因此,如果您想真正使用整个对象,则可以将其作为字符串传递:
const a = sha256(JSON.stringify(data1)).toString()
const b = sha256(JSON.stringify(data2)).toString()