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

最近接手了一个项目
是一个比较完整的项目了 我需要进行改造 是基于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() 函数进行解码就可以

    原文作者:Resssssss
    原文地址: https://segmentfault.com/a/1190000019682101
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞