一次项目中的验签加密的一些坑主要是数据格式问题

61次阅读

共计 723 个字符,预计需要花费 2 分钟才能阅读完成。

最近接手了一个项目
是一个比较完整的项目了 我需要进行改造 是基于 vuecli3.0+webpack 开发的 u
其中有一个功能就是我们每个请求都要进行一次验签 就是取一些字符串进行加密 并将验签加入请求头中 后台也用相同的算法进行加密 然后比对
这个功能本身是写好的 但是有些问题
我们其中的加密字段是穿的参数按照字母排序 然后取第一个参数的前三位和最后一个参数的后三位
这都很简单用 sort()方法排序一下就行
第一个问题就是
axios 直接传值的话服务端会认为是字符串所以截取的时候会将符号也截取一般就成了{“+ 排序第一的参数的第一个字母和排序最后一个参数的最后一个字母 + “} 这样明显是有问题的 不过这个解决也简单 直接用 qs 这个插件处理一下就 ok 这里我做了一个处理 如果 requestData 是类型是字符串 用

requestData.split('&').sort().join('').replace(/([^=><])=([^=><])/g,'$1$2');

进行排序
如果是对象 用

    for (var i in requestData) {dataString += `${i}${requestData[i]}&`
                }
                dataString = dataString.split('&').sort().join('')

进行排序
这样就解决了大部分的问题

但是昨天突然有一个模块说验签又不过了
我就很奇怪 就让后端小哥把没加密的串返回给我对比了一下
首先还是我上面说的截取到了符号 这个简单 qs 处理一下
然后这里的问题是用 qs 处理过后 参数中如果带有中文 后端接收到的其实是中文 但是 qs 自己会对中文进行 encodeURIComponent 转码 这个处理也很简单 使用 decodeURIComponent() 函数进行解码就可以

正文完
 0