首页
学习
活动
专区
圈层
工具
发布

加密接口测试中AI的实战

在加密接口测试中,AI的应用可以显著提升测试的效率和效果。以下将详细介绍加密接口测试的基本步骤,并在此基础上探讨如何借助AI进行优化和增强。

1. 加密接口测试基本步骤

1.1 接口加密字典测试

接口加密字典测试涉及到加密算法使用的密钥、向量等信息。测试人员通过该字典对接口进行测试,使用各种输入值进行测试并验证输出结果是否符合预期。具体注意事项如下:

检查输入值是否符合要求

检查输出值是否正确

检查加密算法的安全性

1.2 模拟器测试

模拟器可以模拟各种加密算法,如RSA、AES、MD5等。测试人员使用多种输入值进行测试并验证输出结果是否符合预期。具体注意事项如下:

检查输入值是否符合要求

检查输出值是否正确

检查加密算法的安全性

1.3 加密算法验证测试

对于复杂的加密算法,测试人员需要通过专门的加密算法验证测试进行测试。这种测试需要专业知识和工具支持。具体注意事项如下:

理解加密算法的原理和实现方式

使用专业的加密算法验证工具进行测试

检查加密算法的安全性

1.4 数据库加密测试

在数据库层面进行测试,测试人员通过多种方式对数据进行加密并验证加密后的数据是否符合预期。具体注意事项如下:

确保数据库的安全性

使用专业的加密方式对数据进行加密

检查加密后的数据是否正确

2. AI在加密接口测试中的应用

2.1 AI辅助的测试用例生成

AI可以通过分析接口的行为和历史测试数据,自动生成多样化的测试用例。这不仅提高了测试覆盖率,还能发现传统方法难以触及的边界情况和异常路径。

2.2 AI驱动的缺陷检测

AI模型可以学习正常接口行为的模式,从而自动识别偏离这些模式的异常行为。这有助于早期发现潜在的安全漏洞和缺陷,提高系统的整体安全性。

2.3 AI优化的测试执行

AI可以根据测试的历史结果和接口的实时表现,智能调度和优化测试执行过程。通过优先级排序和资源分配优化,使得测试执行更高效,减少不必要的重复工作。

2.3.1 基于加密接口的测试用例设计实战

由于信息安全的原因,许多接口在传输时会对请求与响应进行加密处理。如果直接对这部分数据做断言是行不通的,需要对这部分接口额外进行解密处理之后,才可以对已解密的接口进行断言。

环境准备

在进行实战之前,需要先准备一个对响应加密的接口。对它发起一个GET请求后,得到一个加密过的响应信息。

先准备一个JSON格式demo:

{"topics":{"orange":"movie","shool":"testing-studio","president":"seveniruby"}}

使用base64对其做加密,得到一个加密后的文件demo64.txt

base64 demo.json > demo64.txt

使用Python命令在“demo64.txt”所在目录启动一个服务

python -m http.server 10000

启动后的样子如图:

使用curl命令对这个服务进行GET请求:

curl http://127.0.0.1:10000/demo64.txt

如果请求成功的话就代表环境已经准备成功

实战练习

调用base64,直接对返回的请求做解密,即可得到解密后的响应,将解密后的响应转为JSON格式,此时就可以对这个返回值做断言且不会报错了。

import base64import jsonimport requestsclass TestEncode:   url = "http://127.0.0.1:10000/demo64.txt"   def test_encode(self):       r = requests.get(self.url)       encode = json.loads(base64.b64decode(r.content))       assert encode["topics"]["president"] == "seveniruby"

这样的写法显然不够优雅,如果被测接口的协议发生变化,Requests库无法支持改变后的协议,需要调用别的第三方库发送请求信息,则还是需要修改底层的源码。碰到这种情况,可以增加一层封装,构造一层更加通用的发送方法。

首先需要通过一个字典的结构体,保存所有的请求信息,包括发送的协议、解码方式、请求method等等,而这种字典形式的结构体也为后面的数据驱动改造做好了一个重要的铺垫。

req_data={"schema": "http","method": "get","url": "http://127.0.0.1:10000/demo64.txt","headers": None}

通过请求信息的结构体中的schema,添加判断条件,去选择不同的请求协议。举个例子,如果schema为“http”的话,就选择调用被封装的requests库。

class ApiRequest:   # 构造send方法,通过   def send(self, data: dict):       if "http" == data["schema"]:           res = requests.request(data["method"], data["url"], headers=data["headers"])           return json.loads(base64.b64decode(res.content))       elif "dubbo" == data["schema"]:           pass       elif "websocket" == data["schema"]:           pass       else:           pass

调用在ApiRequest类中的send方法发送请求并进行断言

class TestEncode:   def test_api(self):       req_data={       "schema": "http",       "encoding": "base64",       "method": "get",       "url": "http://127.0.0.1:10000/demo64.txt",       "headers": None       }       re = ApiRequest()       data = re.send(req_data)       assert data["topics"]["president"] == "seveniruby"

如果面对不同的算法,还需要修改底层的源码,所以需要把算法封装。需要使用哪个算法,就使用哪个。封装的思想与上面相同。首先在字典结构体中添加一个encoding字段,用来判断选择的不同加密条件。

还是通过请求信息的结构体中的encoding,添加判断条件,去选择不同的解密方式。

2.4 总结

在面对一个加密的响应结果时,可以使用以下处理方式:

如果知道使用的是哪个通用加密算法,可以自行解决。

如果不了解对应的加密算法,可以让研发提供加解密的lib。

如果既不是通用加密算法、研发也无法提供加解密的lib,可以让加密方提供远程解析服务,这样算法仍然是保密的。

本文主要讲解了在了解使用加密算法的情况下,如何处理这样的解密算法。但是封装的思路都是相通的,不管是面对哪种情况,都可以通过格式化的数据,指明数据的内容,并通过一层逻辑的封装,将加解密或者选择的协议封装进去。

3. 结论

AI在加密接口测试中的应用不仅可以提升测试的智能化程度,还可以大幅提高测试的效率和质量。通过AI辅助的测试用例生成、缺陷检测和测试执行优化,测试人员可以更好地应对日益复杂的加密技术和安全威胁。结合实际案例,我们可以看到AI在加密接口测试中的巨大潜力和价值。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OWxLsMkPkrTLC4E4gVkJLCVg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券