小程序签名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) ...
随机推荐
- api文档设计工具:RAML、Swagger
api文档设计工具是用来描述和辅助API开发的. 一.RAML https://raml.org/ https://wenku.baidu.com/view/9523238d5ef7ba0d4b733 ...
- Java并发包--线程池框架
转载请注明出处:http://www.cnblogs.com/skywang12345/p/3509903.html 线程池架构图 线程池的架构图如下: 1. Executor 它是"执行者 ...
- IE版本判断条件注释
IE下判断IE版本的语句...[if lte IE 8]……[endif] <!--[if lte IE 6]> <![endif]--> IE6及其以下版本可见 < ...
- C#分隔字符串时遭遇空值
在C#中分隔字符串时,按特定字符进行分隔的时候可能会遇到空值,如何我现在传入的是Id的字符串,如:"1501,1502,1503,,1505",以逗号分隔,由于各种原因,导致传入的 ...
- 行内元素进行绝对(absolute),固定(fixed)定位后会变成块级元素·
行内元素进行绝对定位后会变成块级元素· position:absolute; <!DOCTYPE html><html lang="en"><head ...
- springboot o.a.tomcat.util.scan.StandardJarScanner : Failed to scan [file:/D:/apache-maven-3.0.5[系统找不到指定路径]
报错信息: 2019-11-04 11:05:52.404 WARN 4512 --- [ main] o.a.tomcat.util.scan.StandardJarScanner : Failed ...
- springBoot怎样访问静态资源?+静态资源简介
1.静态资源 怎样通过浏览器访问静态资源? 注意:不需要加static目录.因为只是告诉springboot目录,而不是静态资源路劲. 这时访问路径就需要加上/static
- Codevs 1038 一元三次方程求解 NOIP 2001(导数 牛顿迭代)
1038 一元三次方程求解 2001年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 有形如:ax3+b ...
- Cogs 58. 延绵的山峰(st表)
延绵的山峰 ★★☆ 输入文件:climb.in 输出文件:climb.out 简单对比 时间限制:1 s 内存限制:512 MB 问题描述 有一座延绵不断.跌宕起伏的山,最低处海拔为0,最高处海拔不超 ...
- seq2seq聊天模型(一)
原创文章,转载请注明出处 最近完成了sqe2seq聊天模型,磕磕碰碰的遇到不少问题,最终总算是做出来了,并符合自己的预期结果. 本文目的 利用流程图,从理论方面,回顾,总结seq2seq模型, seq ...