为什么当我更改对象的数据时,对象的散列值保持不变?

Why is the hash of an object staying the same when I change its data?

我有这段代码可以对对象进行哈希处理。

我将这个散列保存为 redis 中的一个超时键,但即使我更改了传入请求对象中的某些内容,它也会生成相同的散列并且 redis 显示那里已经有相同的键。

这个包在散列方面有问题还是我的代码有问题?

const asyncMiddleware = require('../middlewares/async');
var CryptoJS = require("crypto-js");
exports.hash = asyncMiddleware(async (hashRequest) => {
    try {
        var hash = CryptoJS.SHA256(hashRequest).toString(CryptoJS.enc.Base64);
        return hash;
    } catch (error) {
        console.log("Error : ", error);
    }
});

您不能将对象传递给 SHA256 方法,您只能传递字符串和 WordArrays

当你传递一个对象时,cryptojs 将在其上 运行 .toString(),这将始终给出相同的输出 ([object Object]),因此具有相同的哈希值。

console.log(({a:1,b:1}).toString())
console.log(({a:1,b:2}).toString())

如果你想散列对象,JSON.stringify() 它们:

const asyncMiddleware = require('../middlewares/async');
var CryptoJS = require("crypto-js");
exports.hash = asyncMiddleware(async (hashRequest) => {
    try {
        return CryptoJS.SHA256(JSON.stringify(hashRequest)).toString(CryptoJS.enc.Base64);
    } catch (error) {
        console.log("Error : ", error);
    }
});

再次查看我的 repl,以了解差异。