接口加密-接口鉴权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);

3

4 var pass =CryptoJS.enc.Utf8.parse("123");

5 var base64_pass=CryptoJS.enc.Base64.stringify(pass);

6

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=?

&timestamp=?

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);

9

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<params_value.length;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<new_key.length;i++){

51 arr[new_key[i]] =obj[new_key[i]];

52 }

53 returnarr;

54 }

posted @ 2022-01-11 16:20  NiceTwocu  阅读(1351)  评论(0编辑  收藏  举报