• 【转】js 对象按照键值(不分区大小写)排序,生成签名方法


    客户需求小程序端用js生成签名,我们按照要求一步一步解决,并且将请求方法封装到一个utils.js里:

    第一步:对关联数组按照键名做正序排序。

    第二步:拼接字符串 

    第三步:将拼接的字符串加上私钥

    第四步:将以上字符串MD5加密

    const md5 = require('md5.js');
    var appsecret ="appsecret ";
    var App_Key ="App_Key ";
    
    //字母排序:不区分大小写
    function sortCharter(a, b) {
    if (a.toString().toUpperCase() > b.toString().toUpperCase()) {
    return 1;
    }
    else if (a.toString().toUpperCase() == b.toString().toUpperCase()) {
    return 0;
    }
    else {
    return -1;
    }
    }
     
    function objKeySort(obj) {//排序的函数
    var newkey = Object.keys(obj).sort(sortCharter);
    //先用Object内置类的keys方法获取要排序对象的属性名,再利用Array原型上的sort方法对获取的属性名进行排序,newkey是一个数组
    var newObj = {};//创建一个新的对象,用于存放排好序的键值对
    for (var i = 0; i < newkey.length; i++) {//遍历newkey数组
    newObj[newkey[i]] = obj[newkey[i]];//向新创建的对象中按照排好的顺序依次增加键值对
    }
    return newObj;//返回排好序的新对象
    }
    String.prototype.PadLeft = function (len, charStr) {
    var s = this + '';
    return new Array(len - s.length + 1).join(charStr, '') + s;
    }
     
    //创建sign
    function create_sign(data) {
     
    console.log("1、排序前create_sign0");
    console.log(data);
    //1、排序
    data = objKeySort(data);
    console.log("1、排序后create_sign111");
    console.log(data);
    //2.拼接
    var txt="";
    var newkey = Object.keys(data);
    for (var i = 0; i < newkey.length; i++) {//遍历newkey数组
    txt = txt + newkey[i].length.toString().PadLeft(2, '0');
    txt=txt+"-";
    txt = txt + newkey[i];
    txt = txt + ":";
    //  console.log("for内部===k-v");
    console.log(newkey[i]);
    console.log(data[newkey[i]]);
    txt = txt + data[newkey[i]].toString().length.toString().PadLeft(4,'0');
    txt = txt + "-";
    txt = txt + data[newkey[i]];
    if (i < (newkey.length-1))
    {
    txt = txt + ";";
    }
    }
    //console.log("for内部===3.追加私钥appsecret");
    //3.追加私钥appsecret
    // console.log(txt);
    // console.log("appsecret=" + appsecret);
    txt = txt + appsecret;
    //4.md5加密
    txt = md5.hex_md5(txt);
    return txt;
    }
    
  • 相关阅读:
    [转载]Android之NetworkOnMainThreadException异常
    Android学习笔记(一): Fragment(一) 基本概念和生命周期
    ubuntu 64位系统创建android 项目找不到R文件
    Cocos2d之“引用计数”内存管理机制实现解析
    Cocos2d之Ref类与内存管理使用详解
    JSON之HelloWord
    Mysql之HelloWorld
    Linux inittab 配置文件
    计算机端口号对应服务总结
    perl文件读写
  • 原文地址:https://www.cnblogs.com/hycms/p/9537807.html
Copyright © 2020-2023  润新知