【完整版】前端签名加密算法

摘要:
Params=对象。assign({};varsignStr=sign(params;for(letkeyinresult){formData.append(key;varsignData=ksort(data;=“undefined”&amp!})无效的参数筛选方法filterParamsfunctionfilterParams(obj){let_newPar={};

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

参考资料: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)

公共请求参数:

参数名值类型说明
functionstring固定值,参见每个接口定义
app_idstring应用id
_signstring签名,见签名算法
_u_tokenstring用户token,如没有则不传或传””
snint毫秒时间戳

                           


>>>>>> 参数加密方法  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;
}

免责声明:文章转载自《【完整版】前端签名加密算法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Apache Spark2.0正式发布关于 errno ==EINTR 的小结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

open-falcon监控系统

官方文档 https://book.open-falcon.org/zh/intro/index.html 一、Open-Falcon介绍 1、监控系统,可以从运营级别(基本配置即可),以及应用级别(二次开发,通过端口进行日志上报),对服务器、操作系统、中间件、应用进行全面的监控,及报警,对我们的系统正常运行的作用非常重要。 2、基础监控 CPU、Load...

jquery 的 ajax 传输 数组 ,但后台无法获取的 原因 与 解决 办法

1.前言 js传输数组到服务器 ,controller无法解析 ,打印结果是 null 2.原因 jQuery会调用jQuery.param序列化参数,源码是 jQuery.param( obj, traditional ), 作用是深度序列化参数对象,用来适应PHP和Ruby on Rails等框架,但servelt api却无法处理 因此,禁用序...

tomcat启动卡在了 At least one JAR was scanned for TLDs yet contained no TLDs 的根本原因与解决办法

1.前言 有时候服务器开启时启动不了,卡在了 org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs 又没有报错,一直在等待。。。刚开始我是看的一脸懵逼 。 百度找了很多博客,基本都是说要修改tomca...

TextRecognitionDataGenerator官方文档解读

Github地址: https://github.com/Belval/TextRecognitionDataGenerator 官方文档:https://textrecognitiondatagenerator.readthedocs.io/en/latest/index.html 官方文档解读 TextRecognitionDataGenerator’...

富文本编辑器ueditor支持从word复制粘贴保留格式和图片的插件

tinymce是很优秀的一款富文本编辑器,可以去官网下载。https://www.tiny.cloud 这里分享的是它官网的一个收费插件powerpaste的旧版本源码,但也不影响功能使用。 http://blog.ncmem.com/wordpress/2019/08/07/umeditor%E7%B2%98%E8%B4%B4word%E5%9B%BE%...

mysqldump常用操作

1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql 2.导出一个表 mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名mysqldump -u wcnc -p smgp_apps_wcnc...