请求头传值异常,同一个字符串不同加密工具hash结果不一样
背景是这样的:
前端发起网络请求时,在请求头header里,把请求的内容进行hash加密,然后放到自定义的字段中,后端接收然后进行认证。
在生产上我们遇到了这样的问题,一小部分请求的hash值,前端传的值和后端接收到的值不一致。
更奇怪的是,后续我们添加了日志记录,发现使用不同的加密工具,相同的内容hash值不一致,并且前端把hash值1传到请求头里,后端接收到hash值2的内容。
请问有没有朋友可以帮忙解释一下。小前端实在是无法理解,只有一小部分客户会遇到这个问题,我们自测时hash的结果都是一致的。
以下是代码简略的示意图
// 如果请求体有数据
if (config.data) {
let str = config.url + JSON.stringify(config.data);
const hash1 = cryptoJS.SHA512(str).toString(cryptoJS.enc.Hex); // crypto-js库
const hash2 = sha512(str); // js-sha512库
// 假设 hash1的值为a hash2的值正常情况下也为a
// 但是在小部分客户的请求中,后端日志看到/test/printlog接收的请求体参数 hash1=a hash2=b
// 出现了hash1和hash2的值不一致的情况
axios.post("/test/printlog", { str: str, hash1: hash1, hash2: hash2 });
// 这里是另一个业务请求的请求头,后端在这个请求头里接收到b,但是前端传的值应该为hash1的值,为a
config.header.testContent = hash1;
}