8年测试总结,接口测试专项-加密/签名,一篇打通接口测试

文章介绍了加密解密的基本概念,包括对称式和非对称式加密,如DES、AES、RSA算法,并通过实例解析了RSA加密的使用场景。此外,文章还涉及到了接口签名的重要性和实现方法,以及在自动化测试、性能测试(如JMeter)中的应用。同时,提到了数字证书和HTTPS协议的安全性,以及在Postman和JMeter中实现签名的方法。
摘要由CSDN通过智能技术生成


前言

什么是加密以及解密?
加密:在网络上传输的原始数据(明文)经过加密后形成(密文)传输,防止被窃取。
解密:将加密还原成原始数据

加密方式分类?
对称式加密:对加密和解密使用的是同一个密钥
非对称式加密:非对称式加密需要两个密钥(双钥),分别叫公钥和秘钥,这两把秘钥可以互相加解密,公钥公开的,不需要保密,私钥是保密的。

加密方式分析

1、加对称密
DES加密算法:加密安全性弱,一般应用于旧的系统里面
AES加密算法:一般用于前后端分离的接口加密
Base64加密算法:编码的方式

2、非对称加密技术(RSA加密算法)
RSA加密算法:最有影响力的加密算法

场景1:通过公钥加密
通过私钥解密
两个用户,A和B,B有双钥,A想要把一个数据报文通过加密的方式传给B。

① B把自己的公钥发送给A(公钥是公开的)
② A使用这个公钥把数据报文进行加密,加密完成传给B(加密后的密文通过网络传给B)
③ B使用自己的秘钥解密得到数据报文

场景2:私钥加密:数字签名
公钥解密:验证签名

数字证书由来:因为公钥是公开的不安全,所以需要第三方的CA(数字证书颁发机构)对公钥进行加密,加密后的东西就叫数字证书。数字证书包括:B用户基本信息以及B公钥的信息,部分证书也附有有效期。X509的标准

CA:双钥,通过私钥加密
验证签名:身份验证。

两个用户,A和B,B有双钥

① B把需要发送的数据报文通过私钥加密。
② B找到CA把自己的公钥做认证
③ CA就用自己的私钥对B的公钥和一些相关的信息一起加密,生成数字证书
④ CA就会把数字证书发给B
⑤ B将密文和数字证书都传给A
⑥ A用CA的公钥去解开数字证书,拿到B的公钥,在使用公钥解密密文,从而得到数据报文

Fiddler不能直接抓取https协议的数据报文,需要安装一个数字证书
https协议=http协议+SSL安全传输协议
SSL安全传输协议:安全套接层。

NetScape(B)研发,Fiddler(A),CA把数字证书发到网上,数字证书生成器。

3、MD5(完全不考虑解密,也叫做哈希算法,散列算法)
Postman举例:在Tests中

//获得当前时间戳
new times = new Date().getTime()

//使用MD5加密
var miwen =

CryptoJS.MD5("admin").toString().toUpperCase()

Jmeter举例

函数助手:__digest

${__digest(MD5.admin,,,)}

接口签名分析

1、什么是接口签名
使用用户名,密码,时间戳和所有的排序过的参数组合起来,再加密得到的字符串,字符串是唯一的有权访问第三方金融接口的鉴权码=sign接口签名。

2、为什么要做接口签名
防伪装攻击;防篡改攻击;防存放攻击;防数据泄漏

3、如何做接口签名,了解签名的规则:
对所有的请求的参数按key按ASCII码做升序排列。

{"c":"3","b":"2","a":"1"}
{"1":"1","b":"2","c":"3"}

把参数名和参数值连接成字符串:

a=1&b=2&c=3

用申请到的appid和appsecret连接到字符串的头部
appid:用户名
appsecret:密码

appid=admin&appsecret=123&a=1&b=2&c=3

用时间戳连接字符串的尾部

appid=admin&appsecret=123&a=1&b=2&c=3&timestamp=124124252

然后再把这个字符串安装32位的MD5加密,加密后再转换成大写。

sign=E48B34F95AE8001C99CB86A612538C04

10秒有效
jmeter实现并且分装成函数的话:自定义函数 jave python

4、postman实现并且封装成函数:JavaScript

Pre-request-Script

//url=https://aaa/sss?com=aaa&nu=hhh&phone=jjjjj&show_appid=jj&showapi_timestamp={{time}}&showapi_sign={{sign}}
var moment = require('moment')//获取时间戳

console.log(request.url);//获取请求信息

var url = request.url;

 

var param = url.split("?")[1]//取到url的?后面的值,按照?分割,取前面就是0

if(param != null)

{
   

{
   var time = moment().format("YYYYMMDDHHmmss")//取当天时间按照YYYYMMDDHHmmss形式显示
   pm.environment.set("time",time);//postman 自带的  全局变量


   param+="&showapi_timestamp="+time;
   param+="&showapi_sign=122344556";
   

   var param = param.split("&") ;//分割变成一个list
   param.sort();//按照要求的方式进行排序a-z
   var keys = new Array(param.length);
   var values = new Array(param.length);
   for(var i=0;i<param.length;i++)
   {
       keys[i]=param[i].split("=")[0]//取=前面的值
       values[i]=param[i].split("=")[1]//取=后面的值
   }
   var str=[]
   for(var p=0;p<keys.length;p++)//如果发现keys需要sign,就不参与验签
   {
       if (keys[p]=="showapi_sign"||values[p]=="{{time}}")
       {
           continue;
       }
       str.push(keys[p]+value[p]);
   }
   var sign = str.join("")
   sign = sign+"sssss"//加密钥
   pm.environment.set("sign",CryptoJs.MD5(sign).toString());//postman 自带的全局变量}
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

只有努力拼搏,才能收获辉煌;只有坚持奋斗,才能追寻梦想。在生命的道路上,不要停下脚步,用汗水浇灌希望,让努力成为自己的底色,绽放出无限可能。

只有拼尽全力,才能超越自我;只有奋斗不懈,方能实现梦想;只有砥砺前行,才能成就辉煌。在人生的舞台上,不要放弃任何机会去闪耀,用激情与努力谱写属于自己的华美乐章!

只有不断超越自己的勇气和毅力,才能开创出属于自己的辉煌人生。无论前路多么崎岖,只要心中有梦想,就别停止追求,坚持奋斗,终将获得无与伦比的成就与荣耀。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值