zoukankan      html  css  js  c++  java
  • postman prerequest动态加密数据构造

    app与服务端通信过程中有时需要加密,这样受保护的body更不易被破解。

    例子:

      工作中有遇到类似于http://test.baidu.com/ad/conf?m2=xx&ch=xxxxx&sign=xxx的请求,通过postman、jmeter在进行请求时由于无法直接获取到sign值,无法顺利走通接口,这时候下边的代码就work了。

    //签名规则:sign=md5(key1=value1&key2=value2&secret)
    var secret = "abcde";//secret
    var newtimestamp=Math.round(new Date().getTime());
    console.log("newtimestamp:"+newtimestamp);
    
    //请求参数名按照ASCII码升序排序
    keys = Object.keys(request.data).sort(); 
    
    //拼接待签名字符串
    var str = [];
    for (var p = 0; p < keys.length; p++) { 
        if(keys[p] == "sign" || request.data[keys[p]] === ""){
            // == 宽松相等,隐性类型转换,值相等,返回true;
            // === 严格相等,值和类型都相等,返回true
            continue;
        }
        if(keys[p] == "qbtime"){
            str.push(keys[p] + "=" + newtimestamp);
            continue;
        }
        str.push(keys[p] + "=" + request.data[keys[p]]);
    }
    
    var presign = str.join("&");
    presign = presign+"&"+secret; //添加secret
    console.log("presign:"+presign);
    var signSecret = CryptoJS.MD5(presign).toString();  //md5
    console.log("signSecret:"+signSecret);
    
    //重设环境变量
    pm.environment.unset("sign");
    pm.environment.unset("timestamp");
    pm.environment.set("sign", signSecret);
    pm.environment.set("timestamp", newtimestamp);
  • 相关阅读:
    阶段性总结---初始阶段
    微信授权以及微信支付所遇到的坑(完善)
    CSS3学习
    Playing with String(codeforces 305E)
    Treblecross(uva 10561)
    序列操作(bzoj 1858)
    传送带(bzoj 1857)
    字符串(bzoj 1856)
    刷题比赛(洛谷 1707)
    大楼(bzoj 2165)
  • 原文地址:https://www.cnblogs.com/mncasey/p/11556081.html
Copyright © 2011-2022 走看看