小程序签名MD5加密
最近小程序需求一个签名加密,要把请求参数按键值排序并转化为字符串,然后进行MD5加密。
//时间戳
var timestamp = (Date.parse(new Date()))/1000;//签名验证
var key = '服务端给的';
var json = {
signTime: timestamp,
versionNumber: that.data.versionNumber,
title: name,
idcard: cardnum,
limit: that.data.limit,
page: that.data.page,
}
//json转换为数组并按键值升序排列再转化为字符串
let { keys, values, entries } = Object;
let dataArr = [];
//json的每个属性和值添加到数组
for (let [key, value] of entries(json)) {
dataArr.push([key + value]);
}
var newStr = dataArr.sort().join(""); //数组排序并转化为字符串
console.log(newStr);
var sign = key + newStr + key;
sign = MD5(sign).toUpperCase(); //MD5加密并转为大写
console.log(sign);
思路是先把json格式的数据的每项参数和属性都添加到一个数组,然后把数组排序,再转为字符串,最后进行MD5加密。
后来觉得有点麻烦,直接新建数组,然后排序转为字符串,再进行MD5加密。
var arr = ['signTime' + timestamp, 'versionNumber' + that.data.versionNumber,
'title' + that.name, 'idcard' + that.cardnum, 'limit' + that.data.limit, 'page' + that.data.page];
var newArr = [];
for (var i = 0; i < arr.length; i++){
newArr.push(arr[i]);
}
console.log(newArr);
var newStr = newArr.sort().join(""); //数组排序并转化为字符串
console.log(newStr);
var sign = key + newStr + key;
现在基本所有接口都要签名,所以直接写了一个简单全局的方法,方便调用。
全局方法:
makeSign:function (obj) {
var key = '你的key';
var timestamp = (Date.parse(new Date()))/1000;
var versionNumber = 'app-v1';
obj["versionNumber"] = versionNumber;
obj["signTime"] = timestamp;
let { keys, values, entries } = Object;
let dataArr = [];
//obj的每个属性和值添加到数组
for (let [key, value] of entries(obj)) {
dataArr.push([key + value]);
}
var newStr = dataArr.sort().join(""); //数组排序并转化为字符串
var sign = key + newStr + key;
sign = MD5(sign).toUpperCase(); //MD5加密并转为大写
return sign;
}
调用:
var obj = {
//必传参数 具体看公司规定
}
obj.sign = app.makeSign(obj); //把签名添加到obj里
var data = obj;
//获取分类信息
wx.request({
url: api.wx.Url,
data: data,
method: 'Get',
header: { 'content-type': 'application/x-www-form-urlencoded' }, // 设置请求的 header
success: (res) => {
console.log(res);
......
}
})
大神的通用方法:
const upperFirst = function (word) {
return word[].toUpperCase() + word.slice();
}
const isType = function (obj, type) {
return type
? toString.call(obj) === '[object ' + upperFirst(type) + ']'
: toString.call(obj).match(/(?![\[object ]).*(?=\])/i)[].toLowerCase();
};
const getSign = function (params) {
if (!params) {
params = {}
}
var bandParam = "key";
var versionNumber = "web-v1";
params["versionNumber"] = versionNumber;
params["signTime"] = (new Date().getTime() / ).toFixed();
var newData = Object.keys(params).sort();
var sign = bandParam; for (let key of newData) {
var item = params[key];
if (isType(item, "array") || isType(item, "object" || key == "sign")) {
return;
}
sign += key + item;
} sign += bandParam;
params["sign"] = MD5(sign).toUpperCase();
return params;
}
调用:
data: getSign({
//必填参数
}),
小程序签名MD5加密的更多相关文章
- 微信小程序引入md5.js
今天给大家安利一下微信小程序引入md5.js的方法,不多说 md5.js在下面 直接复制到项目的utils/md5.js即可 /* * A JavaScript implementation of t ...
- java独立小程序实现AES加密和解密
一.需求: web项目中配置文件配置的密码是明文的, 现在需要修改成密文, 加密方式采用AES, 于是写了个工具类用于加密和解密. 又因为这个密码是由客户来最终确定, 所以为了部署时方便起见, 写了个 ...
- [开源]入坑Qt,我的第一个小程序:MD5计算器
版权声明 --------- 本文仅在知乎与博客园发布.开发者为szx0427 MFC和Win32搞了好几年了,也算是懂了个皮毛,但是一直觉得用这两者开发软件都很麻烦,需要将大量的代码花费在UI等地方 ...
- Flutter 接口签名MD5加密
第一步 更新pubspec.yaml crypto: ^+ 第二步 先引入头文件: import 'dart:convert'; import 'package:convert/convert.dar ...
- 微信小程序des加密、PHP des解密
最近在做对小程序传输数据进行加密,加密方法有很多,使用的是des对称加密 采用的是CBC模式, 引用的插件为tripledes.js,https://github.com/Favour1111in/h ...
- 微信小程序学习指南
作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- 微信小程序 微信支付
微信小程序前端自处理: //时间戳 timeStamp() { return parseInt(new Date().getTime() / 1000) + '' }, //随机数 randomStr ...
- md5加密、Des加密对称可逆加密、RSA非对称可逆加密、https单边验证、银行U盾双边认证
1.md5不可逆的加密方式,加密成一个32位的字符串.算法是公开的,任何语言的加密结果都是一样的.总有可能是重复的. 用途: (1)防止明文存储:可以用作密码加密 ...
- 3、Android应用程序签名及发布
一.问个问题,为何我们需要签名以及版本控制? 程序做好了,我们要放到Market上进行商业发布. 二.发布步骤 [准备发布] 1)移除log , 设置版本编号和名称. 2)签名,通过ADT工具. 3) ...
随机推荐
- LINQ to DataSet,对离线数据的Linq支持、AsEnumeable()
一.DataTable的扩展方法: 1.DataTable转Linq:AsEnumerable 方法 返回IEnumerable<T>对象,其中泛型参数T是DataRow. 此对象可用在 ...
- MySQL内存结构
实际上MySQL内存的组成和Oracle类似,也可以分为SGA(系统全局区)和PGA(程序缓存区). mysql>show variables like "%buffer%" ...
- spring timetask 定时任务调度
作者:Garry1115 定时任务调度即在设置的特定时间执行特定的任务,不需要人工干预. spring timertask spring 自身所带定时任务类,不需要引入第三方jar包,使用方式如下: ...
- [hdoj4578][多延迟标记的线段树]
Transformation Time Limit: 15000/8000 MS (Java/Others) Memory Limit: 65535/65536 K (Java/Others)T ...
- 一步一步学会preload和prefetch
preload和prefetch是什么? 我们常说的preload和prefetch,是link标签rel里新增的两种值,用于让浏览器提前加载指定的资源,它们会先被缓存(属于http cache缓存) ...
- Codeforces Round #592 (Div. 2)【C题】{补题ING}
思路:x,y,z肯定不为负数xw+dy=p,直接枚举系数较小的y即可,y的范围:y<w,因为大于w的时候,不如去增加x,这样x+y的和还能保持尽可能小. /* x*w+y*d=p; x*w+(K ...
- Vue之合理划分容器组件与展示组件
Vue之合理划分容器组件与展示组件 时间 2019-06-02 00:30:32 Poetry's Blog 原文 http://blog.poetries.top/2019/06/01/vue- ...
- git 远程代码被覆盖
场景: 解决方法: 第1步. 回退至上一个完整的正确的版本.Git Bash 中输入命令: git reset --hard 1b59cef2a1685c37b7e7b5f2497e055f5e031 ...
- python 使用流式游标 读取mysql怎么不会内存溢出
使用过java读取mysql大数据量的人应该都知道,如果查询时不开游标不设置一次性区大小的话,会一次性的把所有记录都拉取过来再进行后续操作,数据量一大就很容易出现OOM 如果用python去读取mys ...
- Java进阶知识26 SSH整合(Struts2、Spring、Hibernate)
1.我用到的jar包 2.整合实例 2.1.数据库建表语句 create database school; -- 创建数据库 use school; -- 使用school数据库 create tab ...