接口加密-接口鉴权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=?
×tamp=?
4.对字符串进行AsccII排序
5.在对字符串多MD5加密得到sign
2 var api_id ="test";
3 var api_secret ="123";
4 var nonce = "235235235";
7 var timestamp = newDate().getTime();
8 console.log(timestamp);
9
11 varparams_value =pm.request.url.query.members;
12 console.log("params_value:"+params_value);
13
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
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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧