SuperYan - 签名保密 https://www.hblyan.com/tag/%E7%AD%BE%E5%90%8D%E4%BF%9D%E5%AF%86/ 【解决方案】 信息传输过程中是否对信息进行数字签名等防护处理 https://www.hblyan.com/archives/150.html 2023-07-13T13:01:00+08:00 背景:未采取技术手段对信息传输过程中的信息进行防护处理。(查看信息传输过程中是否对信息进行数字签名等防护处理。方案:对请求参数进行HmacSHA256 获取hash 后写入 header中,方便后端进行参数校验应用:传输加密axios 统一封装 参数签名对requestbody 参数进行签名const secretKey = 'secretkey';//用于加密的秘钥 setApiDefaultConfig({ //axios 用于转换 request 的方法 transformRequest: [(data, headers) => { headers['X-Signature'] = CryptoJS.HmacSHA256(JSON.stringify(data),secretKey) // axios默认是Request Payload格式,加了transformRequest会默认变成form Data格式,需要自己再转一下变回Request Payload,我在这里 再默认将他转为 json格式,这里是个小坑 需要注意一下 headers['Content-Type'] = 'application/json;charset=UTF-8' return JSON.stringify(data); }] })校验签名保证传参过程中不被篡改,实际使用 加密前的参数 进行同样的 加密过程 比较签名即可 //解密参数 生成签名 const calculatedSignature = crypto.HmacSHA256(JSON.stringify(data), secretKey).toString(); if (calculatedSignature === header中携带的签名) { console.log('签名验证通过'); } else { console.log('签名验证失败'); }