接口加密-接口鉴权sign
一、加密接口的测试
对称式加密:DES,AES,Base64 可以加密也可以解密。
非对称式加密:RSA 公钥加密,私钥解密,私钥加密,公钥解密
只加密不解密:MD5,SHA256
目前还没有搭建完整的接口测试地址。但是有现成的脚本。
MD5
1 var user =CryptoJS.MD5("admin").toString().toUpperCase();
2 var pass =CryptoJS.MD5("123").toString().toUpperCase();
3 pm.globals.set("user",user);
4 pm.globals.set("pass",pass);
Base64
1 var user =CryptoJS.enc.Utf8.parse("admin");
2 var base64_user=CryptoJS.enc.Base64.stringify(user);
4 var pass =CryptoJS.enc.Utf8.parse("123");
5 var base64_pass=CryptoJS.enc.Base64.stringify(pass);
7 pm.globals.set("base64_user",base64_user.toString().toUpperCase());
8 pm.globals.set("base64_pass",base64_pass.toString().toUpperCase());
二、接口签名sign
自定义加密算法。
是一种鉴权方式。复杂的鉴权方式。
接口签名:就是使用appid,secret,nonce(流水号),timestamp时间戳,以及
params和body中的参数按照一定的额规则形成一个新的字符串,然后对这个字符串做加密之后得到sign签名鉴权码。
目的:
1.防止接口秘钥泄漏。
2.防止接口被篡改。
3.防止接口被重复提交
怎么做?
1.获取到所有的参数包括params和body
2.把所有的参数组成一个字符串:{a:1,b:2,c:3}
3.把appid和secret拼接到字符串前面,把nonece和timestamp拼接到最后:appid=admin&secret=123&username=admin&password=123&nonce=?
×tamp=?
4.对字符串进行AsccII排序
5.在对字符串多MD5加密得到sign
1 //1.获取到apiid和apisecret
2 var api_id ="test";
3 var api_secret ="123";
4 var nonce = "235235235";
6 //2.获得时间戳
7 var timestamp = newDate().getTime();
8 console.log(timestamp);
10 //3.获取到params里面传输的参数
11 varparams_value =pm.request.url.query.members;
12 console.log("params_value:"+params_value);
13
14 //4.获得body里面传输的参数,
15 //JSON.parse()把字符串转化成[object Object]对象。JSON.stringify()把对象转化成字符串。
16 varbody_value =request.data;
17 console.log("body_value:"+JSON.stringify(body_value));
18
19 //5.将params里面传输的参数和body里面传输的参数组合到一个JSON对象。
20 for(vari=0;i 21 body_value[params_value[i].key] =params_value[i].value; 22 } 23console.log("allstring:"+JSON.stringify(body_value)); 24 25 //6.把allstring的key按照升序排列。 26 body_value=objectsort(body_value); 27 console.log("asccII_allstring:"+JSON.stringify(body_value)); 28 29 //7.把json对象转化成key=value&key=value这种格式 30 varnew_string =""; 31 for(varkey inbody_value){ 32 new_string += key+ "=" + body_value[key] +"&"; 33 } 34 new_string =new_string.substr(0,new_string.length‐1); 35 console.log("new_string:"+JSON.stringify(new_string)); 36 37 //8.获得完整的字符串 38 vartotal_string ="api_id="+api_id+"&"+"api_secret="+api_secret+"&"+new _string+"&"+"nonce="+nonce+"&"+"timestamp="+timestamp; 39 console.log("total_string:"+JSON.stringify(total_string)); 40 41 //9.获得sign 42 sign=CryptoJS.MD5(total_string).toString().toUpperCase(); 43 console.log("sign="+sign); pm.globals.set("sign",sign); 45 46 //把对象的key升序排序函数 47 functionobjectsort(obj){ 48 var new_key =Object.keys(obj).sort(); 49 var arr ={}; 50 for(vari=0;i 51 arr[new_key[i]] =obj[new_key[i]]; 52 } 53 returnarr; 54 }