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

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

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

原文地址:https://www.cnblogs.com/ivan5277/p/12003796.html

时间: 2024-08-30 13:25:59

【完整版】前端签名加密算法的相关文章

Linux学习总结(1)——Linux命令大全完整版

Linux命令大全完整版 目    录I 1. linux系统管理命令1 adduser1 chfn(change finger information)1 chsh(change shell)1 date2 exit3 finger4 free5 fwhois5 gitps(gnu interactive tools process status)5 groupdel(group delete)6 groupmod(group modify)6 halt7 id7 kill8 last8 la

C#支付宝扫码支付代码完整版(转)

C#支付宝扫码支付代码完整版 2018年08月24日 15:46:39 bruce135lee 阅读数:2948 本文实例为大家分享了C#支付宝扫码支付示的具体代码,供大家参考,具体内容如下 支付宝工具类 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 5

CSS3弹性盒模型flexbox完整版教程

文章目录 基础知识 属性介绍 display: flex | inline-flex; (适用于父类容器元素上) 请注意: flex-direction (适用于父类容器的元素上) flex-wrap (适用于父类容器上) flex-flow (适用于父类容器上) justify-content (适用于父类容器上) align-items (适用于父类容器上) align-content (适用于父类容器上) order (适用于弹性盒模型容器子元素) flex-grow (适用于弹性盒模型容

中国移动短信网关错误代码汇总(完整版)

中国移动短信网关错误代码汇总(完整版) 发短信的时候,平台里经常会提示一些不常见的错误网关代码,这里先移动短信网关错误代码先整理出来供大家查询,希望可以帮助到大家,若有的代码没有更新,还请大家跟帖留下,我会及时更新上. 错误码 原因描述 改进建议 MK:0255 未确定的错误原因. 保留. MK:0210 MS错误. 检查被叫手机是否有接收短消息的功能. MK:0209 SIM中没有存储短消息的能力. 检查被叫手机的SIM卡是否不能存储短消息. MK:0208 SIM(Subscriber Id

微信公众平台开发接口PHP SDK完整版

原文:微信公众平台开发接口PHP SDK完整版 官方提供的SDK只有一个文本消息功能,我们将所有消息的消息类型及事件响应都整理了进来,并且加入日志记录,代码如下: 更新日志: 2013-01-01 版本1.02014-03-15 增加图片.视频.语音的内容回复2014-04-09 增加菜单链接事件2014-04-10 修改文本回复的判定方法2014-05-20 增加高级群发消息通知事件2014-05-26 增加多客服消息及多客服的判定方法2014-05-27 修改自动回复判定方式2014-06-

flexbox-CSS3弹性盒模型flexbox完整版教程

原文链接:http://caibaojian.com/flexbox-guide.html flexbox-CSS3弹性盒模型flexbox完整版教程 A-A+ 前端博客•2014-05-08•前端开发 | 精选推荐•CSS3 | flexbox | 弹性布局•16928View19 文章目录 来自CSS Tricks上的一个教程,原文为:A Complete Guide to Flexbox.文中详细的介绍了新版的弹性盒子的相关属性,并且给出了几个使用例子.是新手入门flexbox的一个优秀教

Struts1和Struts2的区别和对比(完整版)(转)

Struts1和Struts2的区别和对比: Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口,而struts2的Action是接口. • Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能.Struts2提供一个ActionSupport基类去 实现 常用的接口.Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Act

网站推广优化教程100条(完整版)

网站推广优化教程100条(完整版)下面介绍新手建站推广完美教程,各位根据自己的实际情况酌情选用: 1.准备个好域名.①.尽量在5位数内,当然也不一定,反正要让用户好记.(看个人):②.尽量用顶级的域名,搜索排名感觉好一点.③.做中文站最好用拼音注册,不要问为什么.看百度(baidu.com)就是很好证明.④.域名的安全性,最好选择有些权威的注册商.⑤.好域名或者说主域名最好注册3年以上,因为百度在扒正规站的毛的时候,会看这些资料,他会觉得你不会很快转行的…… 2.网站空间很重要①.速度打开速度慢

完整版linux下android源码下载、编译、模拟器启动运行

一.环境说明: 1.VMware版本:8.0.3 build-703057 2.liunx系统:Ubuntu10.10 3.jdk:sun-java6-jdk 二.Ubuntu 10.10更新源列表 由于??Ubuntu 10.10版本的源已经过期了,所以,需要对其进行更新,Ubuntu 10.10 已经发布了,下面提供更新源方法与更新源列表地址: 1.sudo gedit /etc/apt/sources.list     编辑你的源列表,将原来的内容全部删除,添加下面的源,复制到你的列表中,