最近接手了一个项目
是一个比较完整的项目了 我须要进行改造 是基于vuecli3.0+webpack开发的u
其中有一个功能就是咱们每一个请求都要进行一次验签 就是取一些字符串进行加密 并将验签加入请求头中 后台也用相同的算法进行加密 而后比对
这个功能自己是写好的 可是有些问题
咱们其中的加密字段是穿的参数按照字母排序 而后取第一个参数的前三位和最后一个参数的后三位
这都很简单用sort()方法排序一下就行
第一个问题就是
axios直接传值的话服务端会认为是字符串因此截取的时候会将符号也截取通常就成了{"+排序第一的参数的第一个字母和排序最后一个参数的最后一个字母 + "} 这样明显是有问题的 不过这个解决也简单 直接用qs这个插件处理一下就ok 这里我作了一个处理 若是requestData是类型是字符串 用vue
requestData.split('&').sort().join('').replace(/([^=><])=([^=><])/g,'$1$2');
进行排序
若是是对象 用webpack
for (var i in requestData) { dataString += `${i}${requestData[i]}&` } dataString = dataString.split('&').sort().join('')
进行排序
这样就解决了大部分的问题ios
可是昨天忽然有一个模块说验签又不过了
我就很奇怪 就让后端小哥把没加密的串返回给我对比了一下
首先仍是我上面说的截取到了符号 这个简单 qs处理一下
而后这里的问题是用qs处理事后 参数中若是带有中文 后端接收到的实际上是中文 可是qs本身会对中文进行encodeURIComponent转码 这个处理也很简单 使用decodeURIComponent() 函数进行解码就能够web