zoukankan      html  css  js  c++  java
  • 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的原创文章,转载请附上原文出处链接及本声明。
  • 相关阅读:
    ElasticSearch 之 Client
    Ubuntu 更新源
    ThinkPad 禁用 触摸板
    编译OpenGL代码时发生 Inconsistency detected by ld.so: dl-version.c: 224: _dl_check_map_versions: Assertion `needed != ((void *)0)' failed! 错误的解决方案
    python 自动认证登录
    RIDE的使用
    robotframework的分支和循环
    webdriver入门
    python字符串中的中文处理
    带认证的页面的自动认证登录
  • 原文地址:https://www.cnblogs.com/xiaole9924/p/11897885.html
Copyright © 2011-2022 走看看