• 技术分享 | 接口自动化中如何完成接口加密与解密?


    原文链接

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

    解决方案

    • 通用加密算法

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

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

    • 研发提供加解密 lib

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

      • 解决方案:需要研发提供加解密对应的 lib 包,完成数据解密。

    • 提供远程解析服务

      • 场景:既不是通用加密算法,研发也无法提供 lib 包。

      • 解决方案:需要加密方提供远程解析服务,这样既解决了加解密问题,研发方也无需担心加解密算法暴露的问题。

    实战练习

    接下来对 httpbin 服务发起一个 base64 加密后的数据信息,httpbin 服务会将此加密数据再次返回,通过这个方式,模拟一个加密后的响应数据。

    针对加密后的响应数据,在断言之前将其解析,获取到正常的数据再进行断言。

    Python 版本

    import requestsimport base64# 加密secret_msg = base64.b64encode("霍格沃兹".encode('utf-8'))def test_send():
        url = "https://httpbin.ceshiren.com/post"
        data = {"msg": secret_msg}
        # 发送接口请求
        res = requests.post(url, data=data)
        # 获取加密的响应数据
        msg = res.json()["form"]["msg"]
        # 对获取的加密数据进行解密
        encoded_str = base64.b64decode(msg).decode('utf-8')
        assert encoded_str == "霍格沃兹"
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    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 secretMsg = Base64.encodeBase64String("hogwarts".getBytes());
        @Test
        void send() throws IOException {
            // 发起请求,并获取响应信息
            LinkedHashMap 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");
        }   }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    推荐学习

    ⬇️ ⬇️ ⬇️

    更多技术文章分享和免费资料领取

  • 相关阅读:
    I2C知识大全系列三 —— I2C驱动之单片机中的I2C
    多目标优化问题的研究概述(Matlab代码实现)
    恒合仓库 - 用户管理、用户列表、为用户分配角色
    Win11怎么安装语音包?Win11语音包安装教程
    混合Rollup:探秘 Metis、Fraxchain、Aztec、Miden和Ola
    2022-6-30 随机过程之条件期望及其性质 (二)
    Neo4j入门基础:CREATE,DELETE,SET,REMOVE(看不懂我直接吃...)
    2019我的Java面试跳槽经历
    clickhouse常用函数总结
    【深度学习】卷积神经网络(CNN)
  • 原文地址:https://blog.csdn.net/hog_ceshiren/article/details/126624198