小程序签名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) ...
随机推荐
- ubuntu下后台服务的管理
注册后台服务后都有脚本存在/lib/systemd/system路径下 如mysql为mysql.service 被service管理的进程被杀掉还是会重启的 应使用service XXX stop停 ...
- Vim键盘图-红色圈标记为重点
- airflow--调度研究
1.从调度到airflow ETL,是英文 Extract,Transform,Load 的缩写,用来描述将数据从来源端经过抽取(extract).转换(transform).加载(load)至目的端 ...
- MySQL数据库有几种索引?分别是什么?
5种索引 1.主键索引 2.唯一索引 3.普通索引 4.全文索引 5.联合索引
- mysql 执行sql语句执行问题
SQL是一套标准,全称结构化查询语言,是用来完成和数据库之间的通信的编程语言,SQL语言是脚本语言,直接运行在数据库上.同时,SQL语句与数据在数据库上的存储方式无关,只是不同的数据库对于同一条SQL ...
- [HNOI2008] 越狱 快速幂
[HNOI2008] 越狱 快速幂 水.考虑不发生越狱的情况:即宗教相同的都不相邻,一号任意放\(m\)种宗教的人,此后\(n-1\)个房间都放与上一个宗教不同的人,有\(m-1\)种,所以共有\(m ...
- 3-自定义构造方法和description方法
http://www.cnblogs.com/mjios/archive/2013/04/19/3031412.html -自定义构造方法和description方法 1 默认的构造方法是什么?有什么 ...
- POJ 1051 Jury Compromise ——(暴力DP)
题目不难,暴力地dp一下就好,但是不知道我WA在哪里了,对拍了好多的数据都没找出错误= =.估计又是哪里小细节写错了QAQ..思路是用dp[i][j]表示已经选了i个,差值为j的最大和.转移的话暴力枚 ...
- mlflow ui 启动报错No such file or directory: 'gunicorn': 'gunicorn'
1.mlflow ui 启动报错,信息如下: [root@localhost mlflow]# mlflow ui /usr/local/python3/lib/python3./importlib/ ...
- oracle insert into 多条数据
mysql : insert into tablename (column1,column2) values ('aa','bb'), ('dd','cc'), ('ee','ff'); oracle ...