10. Javascript 前后端数据加密
程序员文章站
2022-04-19 19:09:41
为了加强项目的接口安全程度,需求如下 1 var options = { 2 // 前端需要传送的数据加密 3 data: { 4 abc: 123, 5 bcd: 123, 6 cds: '撒旦教付货款12313', 7 }, 8 // 模拟后端返回base64码 9 key: 'NWxCZUZ3 ......
为了加强项目的接口安全程度,需求如下
1 var options = { 2 // 前端需要传送的数据加密 3 data: { 4 abc: 123, 5 bcd: 123, 6 cds: '撒旦教付货款12313', 7 }, 8 // 模拟后端返回base64码 9 key: 'nwxczuz3ywle' 10 } 11 var test = function (option) { 12 //定义时添加var表示是私有属性 内部使用 13 var data = option.data; // 前端传送的数据 14 var key = option.key; // base64 15 // 前端对数据做ascii码排序 16 var sort_ascii = function (obj) { 17 if (obj == null) return ''; 18 var arr = new array(); 19 var num = 0; 20 for (var i in obj) { 21 arr[num] = i; 22 num++; 23 } 24 var sortarr = arr.sort(); 25 var sortobj = {}; 26 for (var i in sortarr) { 27 sortobj[sortarr[i]] = obj[sortarr[i]]; 28 } 29 return sortobj; 30 } 31 // 对象封装 将data转译成字符串 32 var changeurl = function (obj) { 33 if (obj == null) return ''; 34 var str = "" 35 var n = 0; 36 object.keys(sort_ascii(obj)).foreach(key => { 37 // if (!isnan(obj[key])) { 38 // str += (n ? '&' : '') + key + '=' + obj[key]; 39 // n++ 40 // } 41 if (!/.*[\u4e00-\u9fa5]+.*$/.test(obj[key])) { 42 str += (n ? '&' : '') + key + '=' + obj[key]; 43 n++ 44 } 45 }) 46 return str 47 } 48 // 字符串与位异或封装 49 var stringtochars = function (_s, _num) { 50 var _r = ""; 51 for (var i = 0; i < _s.length; i++) { 52 _r += string.fromcharcode(_s.charcodeat(i) ^ _num); 53 } 54 return _r.trim().replace(/\s/g, ""); 55 } 56 // 封装内部计算方式 57 var remainder = function (str) { 58 var num = math.pow(2, str.length % 3 + 1); 59 return stringtochars(changeurl(data), num) 60 } 61 // 方法前加this表示公共方法 可以在外部访问 62 // 获取前后端密钥 63 this.getsignature = function () { 64 var code = stringtochars(key, 2) 65 var n = math.pow(2, code.length % 3); 66 code = stringtochars(md5(code), n) 67 // md5加密前后密钥 68 return md5(remainder(changeurl(data)) + code) 69 } 70 } 71 var t = new test(options); 72 // 生成最后的签名 73 console.log(t.getsignature());
版权声明:本文为小乐9924的原创文章,转载请附上原文出处链接及本声明。
推荐阅读