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

打印 上一主题 下一主题

主题 1819|帖子 1819|积分 5457

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

加密:在网络上传输的原始数据(明文)颠末加密后形成(密文)传输,防止被窃取。
解密:将加密还原成原始数据
2、加密方式分类?

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

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(完全不考虑解密,也叫做哈希算法,散列算法)

  1. Postman举例:在Tests中
  2. //获得当前时间戳
  3. new
  4. times =
  5. new Date().getTime()
  6. //使用MD5加密
  7. var
  8. miwen
  9. =
  10. CryptoJS
  11. .MD5("admin").toString().toUpperCase()
  12. Jmeter
  13. 函数助手:__digest
  14. ${__digest(MD5.admin,,,)}
复制代码
二、接口签名

1、什么是接口签名?

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



  • 防伪装攻击
  • 防窜改攻击
  • 防存放攻击
  • 防数据走漏
3、如何做接口签名,相识签名的规则:

对所有的哀求的参数按key按ASCII码做升序分列。
  1. {"c":"3","b":"2","a":"1"}
  2. {"1":"1","b":"2","c":"3"}
复制代码
把参数名和参数值毗连成字符串:
  1. a
  2. =
  3. 1&b=2&c=3
复制代码
用申请到的appid和appsecret毗连到字符串的头部
  1. appid:用户名appsecret:暗码appid=admin&appsecret=123&a
  2. =
  3. 1&b=2&c=3
复制代码
用时间戳毗连字符串的尾部
  1. appid=admin&appsecret=123&a
  2. =
  3. 1&b=2&c=3×tamp=124124252
复制代码
然后再把这个字符串安装32位的MD5加密,加密后再转换成大写。
  1. sign
  2. =
  3. 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. {
  11.    
  12. var time = moment().format("YYYYMMDDHHmmss")//取当天时间按照YYYYMMDDHHmmss形式显示
  13. pm.environment.set("time",time);//postman 自带的  全局变量
  14. param+="&showapi_timestamp="+time;
  15. param+="&showapi_sign=122344556";
  16.    
  17. var param = param.split("&") ;//分割变成一个list
  18. param.sort();//按照要求的方式进行排序a-z
  19. var keys = new Array(param.length);
  20. var values = new Array(param.length);
  21. for(var i=0;i<param.length;i++)
  22.     {
  23.         keys[i]=param[i].split("=")[0]//取=前面的值
  24. values[i]=param[i].split("=")[1]//取=后面的值
  25.     }
  26.     var str=[]
  27.     for(var p=0;p<keys.length;p++)//如果发现keys需要sign,就不参与验签
  28.     {
  29.       if (keys[p]=="showapi_sign"||values[p]=="{{time}}")
  30.         {
  31.             
  32. continue;
  33.   }
  34.         
  35. str.push(keys[p]+value[p]);
  36.         
  37. }
  38. var sign = str.join("")
  39.     sign = sign+"sssss";//加密钥
  40. pm.environment.set("sign",CryptoJs.MD5(sign).toString());//postman 自带的全局变量}
复制代码

三、尾声

好了就写这么多吧,最后感谢每一个阅读我文章的人,一点小心意,虽然不是啥值钱的东西,需要的话直接拿走:
 

上面是我网络的一些软件测试资源,这也是全网最全面最完备的软件测试资料库了,在这个过程中帮到了我许多。如果你不想再体验一次自学时找不到资料,没人解答问题,对峙几天便放弃的感受的话,可以点击下方小卡片免费领取
 
 



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

北冰洋以北

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表