写点什么

软件测试 | 接口加密与解密

  • 2023-02-26
    北京
  • 本文字数:1149 字

    阅读完需:约 4 分钟

加密是一种限制用户对网络上传输的数据拥有访问权的技术。将密文还原为原始明文的过程称为解密,它是加密的反向处理。在接口测试中我们使用加密、解密技术,可以防止机密数据被别人泄露或篡改。在接口自动化测试过程中,我们如果要验证加密接口响应值的正确性,就必须先对响应值进行解密,再进一步完成验证。


1.解决方案


通过加密算法


  • 场景:了解数据使用的通用加密算法,如 base64.

  • 解决方案:使用通用的加密/解密算法对获取的响应信息加密后,然后对响应信息进行解密操作。


开发人员提供加密/解密 lib 包


  • 场景:不了解对应的加密算法。

  • 解决方案:需要开发人员提供加密/解密对应的 lib 包


提供远程解析服务


  • 场景:既不是通用加密算法,开发人员也无法提供加密/解密 lib 包

  • 解决方案:需要加密方提供远程解析服务,这样即解决了加密/解密问题,开发人员也不用担心加密/解密算法暴露的问题。


2.实战演示


接下我们演示对 httpbin 服务发起一个请求,httpbin 服务将返回加密后的响应信息。


我们获取到加密后的响应信息,对加密后的响应信息进行加密,然后对解密后的响应信息进行断言,实现的演示代码如下(Python 版和 Java 版)。

(1)Python 演示代码

import requestsimport base64
# 加密secrest_msg = base64.b64encode("霍格沃兹".encode('uft-8'))
def test_send(): url = "https://httpbin.ceshiren.com/post" gata = {"msg":secrest_msg} #发送接口请求 res = requests.post(url,data=data) #获取加密的响应信息 mag = res.json()["from"]["msg"] #对获取的加密的响应信息进行加密 encode_str = base64.b64decode(msg).decode('utf-8') assert encode_str == "霍格沃兹"
复制代码


(2)Java 演示代码

import org.apache.commons.codec.binary.Base64;import org.junit.jupiter.api.Test;import java.io.IOException;import java.util.LinkedHashMap;import static io.restassured.RestAssured.given;
public class SendTest{ //进行加密 String secretMag = Base64.encodeBace64String("hogwarts".getBytes()); @Test void send() throws IOException{ //发起请求,并获取响应信息 LinkedHashMap<String,String> responseForm = given(). FormParam("msg",secretMsg). when(). post("https://httpbin.ceshiren.com/post"). then().extract().path("form"); //获取加密后的响应信息(为二进制数组格式) byte[] base64Msg = Base64.decodeBase64(secretMsg); //将数组格式转码为String类型,即可得到正常的返回值 String msg= new String(base64Msg,"utf-8"); assert msg.equals("hogwarts"); }}
复制代码

搜索微信公众号:TestingStudio 霍格沃兹的干货都很硬核

用户头像

社区:ceshiren.com 微信:ceshiren2023 2022-08-29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
软件测试 | 接口加密与解密_测试_测吧(北京)科技有限公司_InfoQ写作社区