欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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 ......

为了加强项目的接口安全程度,需求如下

10. Javascript 前后端数据加密

 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的原创文章,转载请附上原文出处链接及本声明。