当前位置:   article > 正文

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

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

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把数字证书发到网上,数字证书生成器。

  1. 现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
  2. 如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
  3. 可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
  4. 分享他们的经验,还会分享很多直播讲座和技术沙龙
  5. 可以免费学习!划重点!开源的!!!
  6. qq群号:691998057【暗号:csdn999

3、MD5(完全不考虑解密,也叫做哈希算法,散列算法)

  1. Postman举例:在Tests中
  2. //获得当前时间戳
  3. new times = new Date().getTime()
  4. //使用MD5加密
  5. var miwen =
  6. CryptoJS.MD5("admin").toString().toUpperCase()
  7. Jmeter
  8. 函数助手:__digest
  9. ${__digest(MD5.admin,,,)}

 

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

  1. Pre-request-Script
  2. //url=https://aaa/sss?com=aaa&nu=hhh&phone=jjjjj&show_appid=jj&showapi_timestamp={{time}}&showapi_sign={{sign}}
  3. var moment = require('moment')//获取时间戳
  4. console.log(request.url);//获取请求信息
  5. var url = request.url;
  6. var param = url.split("?")[1]//取到url的?后面的值,按照?分割,取前面就是0
  7. if(param != null)
  8. {
  9. {
  10. var time = moment().format("YYYYMMDDHHmmss")//取当天时间按照YYYYMMDDHHmmss形式显示
  11. pm.environment.set("time",time);//postman 自带的 全局变量
  12. param+="&showapi_timestamp="+time;
  13. param+="&showapi_sign=122344556";
  14. var param = param.split("&") ;//分割变成一个list
  15. param.sort();//按照要求的方式进行排序a-z
  16. var keys = new Array(param.length);
  17. var values = new Array(param.length);
  18. for(var i=0;i<param.length;i++)
  19. {
  20. keys[i]=param[i].split("=")[0]//=前面的值
  21. values[i]=param[i].split("=")[1]//=后面的值
  22. }
  23. var str=[]
  24. for(var p=0;p<keys.length;p++)//如果发现keys需要sign,就不参与验签
  25. {
  26. if (keys[p]=="showapi_sign"||values[p]=="{{time}}")
  27. {
  28. continue;
  29. }
  30. str.push(keys[p]+value[p]);
  31. }
  32. var sign = str.join("")
  33. sign = sign+"sssss"//加密钥
  34. pm.environment.set("sign",CryptoJs.MD5(sign).toString());//postman 自带的全局变量}

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:程序员小濠 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/472609
推荐阅读
相关标签
  

闽ICP备14008679号