• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

小程序签名MD5加密

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

最近小程序需求一个签名加密,要把请求参数按键值排序并转化为字符串,然后进行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[0].toUpperCase() + word.slice(1);
}
const isType = function (obj, type) {
  return type
    ? toString.call(obj) === \'[object \' + upperFirst(type) + \']\'
    : toString.call(obj).match(/(?![\[object ]).*(?=\])/i)[0].toLowerCase();
};
const getSign = function (params) {
  if (!params) {
    params = {}
  }
  var bandParam = "key";
  var versionNumber = "web-v1";
  params["versionNumber"] = versionNumber;
  params["signTime"] = (new Date().getTime() / 1000).toFixed(0);
  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({
    //必填参数
}),

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
微信小程序-MD532位加密 - 魏文塔发布时间:2022-07-18
下一篇:
Java之——实现微信小程序加密数据解密算法(转)发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap