zoukankan      html  css  js  c++  java
  • 【完整版】前端签名加密算法

    需求:对公司项目敏感数据,使用前后端进行接口加密处理。

    参考资料:https://www.jianshu.com/p/a47477e8126a (采用的是 AES + BASE64 算法加密)

    依赖导入:

    import './core.js'
    import './md5.js'

    扫盲:

    crypto-js 是一个纯 javascript 写的加密算法类库 ,可以非常方便地在 javascript 进行 MD5、SHA1、SHA2、SHA3、RIPEMD-160 哈希散列,进行 AES、DES、Rabbit、RC4、Triple DES 加解密。

    这里我们使用它的MD5加密方法。

    CryptoJS.MD5(signStr)

    公共请求参数:

    参数名值类型说明
    function string 固定值,参见每个接口定义
    app_id string 应用id
    _sign string 签名,见签名算法
    _u_token string 用户token,如没有则不传或传””
    sn int 毫秒时间戳

                               


    >>>>>> 参数加密方法  getEncryptParams

    function getEncryptParams(params) {
        //params遍历,如果属性为空,则不传
        params = filterParams(params)
        var timestamp = Math.round(new Date().getTime()).toString();
        //通过request.data获取body的内容,这个是postman内置变量
        // var param = request.data;
        // request.data["sn"] = timestamp;
        params = Object.assign({}, params, { sn: timestamp, app_id: "XXXX"})
    
        var appSecret = "XXXXXXXXXgrvVGcfkO8Mzh0pSCsPxXXXXXXX";
        // var sign = md5Sign(params, appSecret);
        var signStr = sign(params, appSecret);
        var result = params = Object.assign({}, params, { _sign: signStr, app_id: "21016" })
        var formData = new FormData();
        for (let key in result) {
            formData.append(key, result[key])
        }
        return result;
    }

    签名算法(举栗子):

    1、对所有请求参数名按ASCII正序排序
    
    2、将排序后的请求参数做拼接生成字符串:key1 + value1 + key2 + value2 + … 如value为null则不拼接 如value是true/false,
    则先转成1/0,true为1,false为0 如value为字典/数组,则先对value进行处理,处理方式同(2):key1 + value1 + key2 + value2 + … 3、对2得到的字符串进行md5(大写),然后拼接上密钥 4、对3得到的字符串进行md5(大写)

    生成签名方法  sign

    function sign(data, appSecret) {
        var SORT_STRING;
        var signData = ksort(data, "");
        if (typeof data.sign != "undefined" && data.sign !== null) {
            delete signData.sign;
        }
    
        var signStr = createLinkstring(signData);
        var m5 = CryptoJS.MD5(signStr).toString();
        var signs = CryptoJS.MD5(m5.toUpperCase() + appSecret)
            .toString()
            .toUpperCase();
    
        return signs;
    }

    无效参数过滤方法  filterParams

    function filterParams(obj){
        let _newPar = {};
        for (let key in obj) {
            //如果对象属性的值不为空,就保存该属性(如果属性的值为0,保存该属性。如果属性的值全部是空格,属于为空。)
            if ((obj[key] === 0 || obj[key]) && obj[key].toString().replace(/(^s*)|(s*$)/g, '') !== '') {
                //记录属性
                _newPar[key] = obj[key];
            }
        }
        //返回对象
        return _newPar;
    }
  • 相关阅读:
    东方通Linux应用部署手册
    TonWeb6.1Linux安装文档
    达梦数据库适配问题
    达梦数据库8安装手册
    中标麒麟7虚拟机安装手册
    线性构成图标绘制样例
    布尔运算知识讲解
    UI设计中的软件知识
    无法用排他锁锁定该数据库,以执行该操作。 (Microsoft SQL Server,错误: 5030)
    【1】如何学习操作系统
  • 原文地址:https://www.cnblogs.com/ivan5277/p/12003796.html
Copyright © 2011-2022 走看看