接口测试实战教程详解(加密解密攻防)

news/2025/2/14 2:50:34/

一、对称加密

对称加密算法是共享密钥加密算法,在加密解密过程中,使用的密钥只有一个。发送和接收双方事先都知道加密的密钥,均使用这个密钥对数据进行加密和解密。

数据加密:在对称加密算法中,数据发送方将明文 (原始数据) 和 加密密钥一起经过加密处理,生成复杂的密文进行发送。

数据解密:数据接收方收到密文后,使用加密的密钥及相同算法的逆算法对加密的密文进行解密,将使其恢复成可读明文。

二、非对称加密

非对称加密算法,有两个密钥,一个称为公开密钥 (publickey),另一个称为 私有密钥 (private key),加密和解密使用的是两个不同的密钥,所以这种算法称为非对称加密算法。

如果使用公钥对数据进行加密,只有用对应的私钥才能进行解密。

如果使用私钥对数据进行加密,只有用对应的公钥才能进行解密。

三、常见加密处理方式

根据上述常见的加密算法,测试人员在测试不同的加密接口可采用下述的方法处理加密接口

摘要算法(MD5.SHA1 ):造接口数据前调用MD5,SHA1进行编码,服务端对比编码后的字符串是否一致

对称加密算法(AES,DES ):造接口数据前从开发获取对称公钥,基于对称公钥可以加密请求数据,解密响应报文

非对称加密算法(RSA):造接口数据前从开发获取公钥私钥去加密解密接口数据

用户认证:一般的接口测试工具都会提供一个User Auth/Authorization的选项

同时,在这我也准备了一份软件测试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看就行,希望对你有所帮助!【公众号:互联网杂货铺】免费领取软件测试资料!

2024年Python自动化测试全套保姆级教程,70个项目实战,3天练完,永久白嫖...

1、OAuth 2.0认证

在对应的工具上,你可以选取对应的用户认证选项,如果用Python如何实现用户认证。

  • 首先安装Requests库,Requests库的get()和post()方法均提供有auth参数,用于设置用户签名。
  • 假定我们有一个接口为添加一个新的公告,接口需要认证:auth=("username","password"),nid 或 name两个参数二选一

伪代码:

highlighter- ruby

def test_get_notice_list_nid_sucess(self):auth_user = ('admin' , 'admin123456')r = requests.get(self.base_url, auth = auth_user, params = {'nid' : 1})result = r.json()self.assertEqual(result['status'], 200)

2、数字签名

在使用 HTTP/SOAP 协议传输数据的时候,签名作为其中一个参数,可以起到关键作用:

先来一个简单的,通过客户的密钥,服务端的密钥匹配;

这个很有好理解,例如一个接口传参为:

highlighter- awk

http://127.0.0.1:8000/api/?a=1&b=2

假设签名的密钥为:@signpassword

加上签名之后的接口参数为:

highlighter- awk

http://127.0.0.1:8000/sign/?a=1&b=2&sign=@signpassword

但是,这样的sign 参数明文传输是不安全的,一般会选择一些加密算法,比如MD5 算法(MD5算法是不可逆向的),比如MD5代码如下:

highlighter- stylus

import hashlib  
md5 = hashlib.md5()
sign_str = "@signpassword"
sign_bytes_utf8 = sign_str.encode()
md5.update(sign_bytes_utf8)
sign_md5 = md5.hexdigest()
print(sign_md5)

执行后得到:6648e929329e53e7a91c50ae685a88b5

此时带签名的接口为:

highlighter- apache

http://127.0.0.1:8000/sign/?a=1&b=2&sign=6648e929329e53e7a91c50ae685a88b5

所以,当服务器接收到请求后,同样需要对“signpassword”进行 MD5 加密,然后,比对与调用者传来的 sign 加密串是否一致,从而来鉴别调用者是否有权限使用该接口。

接着,我们来理解一个复杂一点的:把sign参数传递为api key(申请获取)+ timestramp(时间戳)同样需要用代码来实现,原理和上面这个一致的。(伪代码)

highlighter- ruby

def setUp(self):   self.base_url = "http://127.0.0.1:8000/api/sec_add_notice/"# app_keyself.api_key = "&APIkey"# 当前时间now_time = time()self.client_time = str(now_time).split('.')[0]# signmd5 = hashlib.md5()sign_str = self.client_time + self.api_keysign_bytes_utf8 = sign_str.encode(encoding="utf-8")md5.update(sign_bytes_utf8)self.sign_md5 = md5.hexdigest()

3、AES加解密的过程

通常接口会使用更复杂一点的方式来进行加密的操作,常见的是AES的使用,放一张图让大家感受一下AES加解密的过程:

Python里面有一个很好的黑魔法,叫PyCrypto库,支持常见的 DES、AES 加密以及 MD5、SHA 各种 HASH 运算。

官方网站下载最新版本:

highlighter- awk

https://www.dlitz.net/software/pycrypto/

另外,也可以在 PyPi 仓库中下载安装:

highlighter- awk

https://pypi.python.org/pypi/pycrypto

对于AES的加密来说,看一下用了PyCrypto库的结果

加密:

highlighter- stylus

from Crypto.Cipher import AES
obj = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
message = "The answer is no"
ciphertext = obj.encrypt(message)
print(ciphertext)

程序运行后的结果为:

highlighter- taggerscript

b'\xd6\x83\x8dd!VT\x92\xaa`A\x05\xe0\x9b\x8b\xf1'

AES加密里面有两个关键,一个是key(必须为16,24,32位),一个是VI(必须为16位)

解密:解谜者必须要同时知道key和VI才可以解密

highlighter- stylus

obj2 = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
s = obj2.decrypt(ciphertext)
print(s)

由Crypto库的作者已停止维护,现推荐安装:

highlighter- cmake

 pip install pycrytodome

pycryptodome官方文档:

highlighter- awk

https://www.pycryptodome.org/en/latest/


http://www.ppmy.cn/news/1288890.html

相关文章

Esp8266对接小爱同学

小爱同学接入流程 设备端开发 1.设置接入的设备类型 2.编译上传代码到设备 3.上线设备 绑定小爱同学 1.打开米家App。通过 我的>其他平台设备>点击添加>点灯科技>绑定账号 ,绑定blinker账号 2.绑定成功后,支持小爱控制的blinker设备会出现在 我的>其他平台…

Eureka注册及使用

一、Eureka的作用 Eureka是一个服务注册与发现的工具,主要用于微服务架构中的服务发现和负载均衡。其主要作用包括: 服务提供者将自己注册到Eureka Server上,包括服务的地址和端口等信息。服务消费者从Eureka Server上获取服务提供者的地址…

Python | 机器学习之数据清洗

机器学习前的数据清洗(异常值检验,标准化处理,哑变量处理) Python | 机器学习之数据清洗 机器学习 - 基础概念 - scikit-learn - 数据预处理​​​​​​​ 数据的标准化(离差标准化、log函数转换、atan函数转换、z…

DrGraph原理示教 - OpenCV 4 功能 - 阈值

普通阈值 OpenCV中的阈值用于相对于提供的阈值分配像素值。在阈值处理中,将每个像素值与阈值进行比较,如果像素值小于阈值则设置为0,否则设置为最大值(一般为255)。 在OpenCV中,有多种阈值类型可供选择&am…

【小沐学NLP】Python实现K-Means聚类算法(nltk、sklearn)

文章目录 1、简介1.1 机器学习1.2 K 均值聚类1.2.1 聚类定义1.2.2 K-Means定义1.2.3 K-Means优缺点1.2.4 K-Means算法步骤 2、测试2.1 K-Means(Python)2.2 K-Means(Sklearn)2.2.1 例子1:数组分类2.2.2 例子2&#xff1…

视频人脸识别马赛克处理

文章目录 前言一、实现思路?二、Coding三、实现效果 前言 前面几篇文章我们尝试了使用opencv完成图像人脸识别以及识别后贴图或者打马赛克的方法。 偶尔我们也会有需求在视频中将人脸马赛克化,opencv也提供了相应的方法来实现这个功能。 一、实现思路&a…

数据库-期末考前复习-第4章-数据库安全性

1、掌握实现数据库安全性控制的常用方法和技术有。 序号常用方法和技术概括1访问控制通过授权和权限管理来限制用户对数据库的访问和操作。可以使用角色和用户管理来定义不同用户的权限级别,并使用访问控制列表(ACL)来控制用户对数据库对象的…

磁盘管理-------RAID卡

目录 一、RAID概述 二、常见类型 (一)RAID 0 (二)RAID 1 (三)RAID 5 (四)RAID 6 (五)RAID 10 (六)总结 三、创建RAID &…