首页 > 其他分享 >接口测试必备技能 - 加密和签名

接口测试必备技能 - 加密和签名

时间:2023-03-02 09:46:20浏览次数:34  
标签:公钥 加密 必备 接口 sign param var 数字证书

每天进步一点点,关注我们哦,每天分享测试技术文章

本文章出自【码同学软件测试】

码同学公众号:自动化软件测试,领取资料可加:magetest

码同学抖音号:小码哥聊软件测试

1、什么是加密以及解密?

加密:在网络上传输的原始数据(明文)经过加密后形成(密文)传输,防止被窃取。

解密:将加密还原成原始数据

 

2、加密方式分类?

对称式加密:对加密和解密使用的是同一个密钥

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



01加密方式详解

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,,,)}

 

免费领取码同学软件测试课程笔记+超多学习资料+完整视频+面试题,可加微信:magetest


02接口签名

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 自带的全局变量}

 

图片

 

免费领取码同学软件测试课程笔记+超多学习资料+学习完整视频 ☞ 可加:magetest/关注码同学公众号:自动化软件测试

本文著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

 

标签:公钥,加密,必备,接口,sign,param,var,数字证书
From: https://www.cnblogs.com/testfan2019/p/17170702.html

相关文章

  • c#MD5加密
    usingSystem.TextusingSystem.Security.Cryptography; stringmd5string=“123456”;MD5md5=newMD5CryptoServiceProvider();byte[]bytes1=......
  • 4 - 高级加密标准 (AES)
    高级加密标准(AES)我的博客原书:《UnderstandingCryptography:ATextbookforStudentsandPractitioners》AES:AdvancedEncryptionStandard是今天使用最广的对......
  • 路飞:路飞前端全局css,全局配置文件、配置axios实现前后台交互、安装vue-cookies、安装e
    目录一、路飞前端全局css,全局配置文件1.1整理项目1.2设置全局css1.3配置全局js二、配置axios实现前后台交互三、安装vue-cookies四、安装elementui五、安装bootstrap和j......
  • 如何绕过登录鉴权直接测试后端接口
    目录回顾Cookie、Session和Token携带Cookie测试携带Token测试一、回顾Cookie、Session和Token(1)CookieCookie是一段存储在浏览器端的文本数据,Cookie中......
  • java AES加密、解密(兼容windows和linux)
     1.准备工作2018年10月24日10点46分importjava.security.SecureRandom;importjavax.crypto.Cipher;importjavax.crypto.KeyGenerator;importjavax.crypto.SecretKe......
  • 加密锁远程升级功能
    加密锁远程升级功能是指通过网络远程更新加密锁设备的固件和授权信息,以保持加密锁的安全性和可用性。这种功能通常是由加密锁厂商提供的服务,通过远程升级,可以及时修复加密......
  • 软件开发商共享加密锁方案
    多个软件开发商共享加密锁方案通常是指采用一种名为“加密锁共享方案”的技术。这种技术是指多个软件开发商使用同一款加密锁设备,将各自的软件产品与该加密锁设备绑定,从而......
  • MD5加密
    //MD5的用途?//1防篡改://发个文档,事先给别人一个MD5,是文档的摘要,//源代码管理器svn--即使电脑断网了,文件有任何改动都能被发现--本地存了一个文件的MD5--文件有更新,就再......
  • RSA加密解密
    相比较于Des对称可逆加密性能要差加密解密速度不快安全性好公开加密key,保证数据的安全传递公开解密key,保证数据的不可抵赖公钥就是公开的key私钥就是不公开的keyC#......
  • RSA加密解密及RSA加签验签
    https://www.cnblogs.com/loveyou/p/7299524.html RSA加密解密及RSA加签验签 RSA安全性应用场景说明在刚接触RSA的时候,会混淆RSA加密解密和RSA加签验签的概念......