当前位置:首页 > 随笔 > 正文内容

接口测试中的加密与签名技术详解

访客 随笔 2026年6月4日 1

加密与解密基础

在接口测试中,数据的安全性至关重要。加密和解密是保障数据传输安全的核心技术。

  • 加密:将原始数据(明文)转换为不可读的形式(密文),以防止被窃取。
  • 解密:将加密后的数据还原为原始数据。

根据密钥的使用方式,加密可以分为两类:

  • 对称加密:加密和解密使用同一密钥。
  • 非对称加密:需要一对密钥——公钥和私钥。公钥用于加密,私钥用于解密。

常见加密算法

以下是几种常见的加密算法及其应用场景:

  • DES:安全性较弱,通常用于旧系统。
  • AES:广泛应用于前后端分离的接口加密。
  • Base64:主要用于编码而非严格意义上的加密。
  • RSA:一种非对称加密算法,具有高安全性。

非对称加密的实际应用

假设用户A和B之间进行数据传输:

  1. B将公钥发送给A。
  2. A使用该公钥加密数据并发送给B。
  3. B使用自己的私钥解密数据。

此外,非对称加密还支持数字签名功能:

  • B使用私钥加密数据(签名)。
  • A使用B的公钥解密数据,验证签名。

数字证书的作用

为了确保公钥的安全性,通常由CA(证书颁发机构)签发数字证书。数字证书包含用户基本信息、公钥信息以及有效期等。

例如,在HTTPS协议中,Fiddler无法直接抓取数据报文,需要安装CA提供的数字证书。

哈希算法简介

MD5是一种典型的哈希算法,生成固定长度的摘要值,无法逆向解密。

以下是在Postman中使用MD5的示例:


// 获取当前时间戳
let currentTime = new Date().getTime();

// 使用CryptoJS库进行MD5加密
let encryptedText = CryptoJS.MD5("admin").toString(CryptoJS.enc.Hex).toUpperCase();

接口签名机制

接口签名是一种验证请求合法性的方法,通常结合用户名、密码、时间戳和参数排序生成唯一的签名字符串。

具体步骤如下:

  1. 按ASCII码顺序对所有请求参数进行升序排列。
  2. 将参数名和参数值拼接成字符串。
  3. 在字符串头部添加appid和appsecret。
  4. 在字符串尾部添加时间戳。
  5. 对最终字符串进行32位MD5加密,并转换为大写。

以下是一个Postman实现的示例:


pm.preRequestScript = () => {
    // 引入moment库获取时间戳
    let moment = require('moment');
    let currentTimestamp = moment().format('YYYYMMDDHHmmss');

    // 设置全局变量time
    pm.environment.set('time', currentTimestamp);

    // 获取请求URL参数
    let urlParams = pm.request.url.query.map(item => `${item.key}=${item.value}`);
    urlParams.push(`showapi_timestamp=${currentTimestamp}`);

    // 排序并排除sign字段
    urlParams.sort();
    let filteredParams = urlParams.filter(param => !param.includes('showapi_sign'));

    // 拼接字符串并添加密钥
    let signString = filteredParams.join('') + 'sssss';
    let finalSign = CryptoJS.MD5(signString).toString(CryptoJS.enc.Hex).toUpperCase();

    // 设置全局变量sign
    pm.environment.set('sign', finalSign);
};

JMeter中的实现

在JMeter中,可以通过内置函数助手完成类似操作:


${__digest(MD5, admin, , )}
标签: 接口测试

相关文章

可以按小时收费的VPS

很多 VPS 提供商都支持 按小时计费(hourly billing),想短期试用 / 临时搭建节点、测试网络、短期项目等场景非常合适。下面是当前最主流且靠谱的按小时 VPS 选项,分别按不同需求场景整理: 1. Vultr(全球节点,包括日本) 按小时计费 可选机房:东京 / 大阪 / 洛杉矶 / 法兰克福 / 伦敦 … 支持 PayPal(部分情况),但更常用信用卡/PayPal+卡价格参考$...

在 iPhone 上下载国外App

地区/国家限制App Store 会根据 Apple ID 的国家或地区限制应用下载。如果你的 Apple ID 绑定的是中国大陆,就可能无法下载 OpenAI 官方的 ChatGPT 应用,因为它在大陆 App Store 不上架。解决办法:换成美国、加拿大、香港等地区的 Apple ID。或者在现有 Apple ID 上更改地区。注册一个国外 Apple ID(推荐)比如注册 美国区 Appl...

Node.js 中的异步编程:回调与 Promise

Node.js 是一个基于 JavaScript 构建的单线程、非阻塞运行环境,它通过异步编程机制来高效处理多个操作。在执行如文件读取、API 请求或数据库查询等任务时,Node.js 不会等待这些操作完成,而是使用回调函数和 Promise 来避免阻塞主线程。 回调方式实现异步 那么当异步操作完成后,Node.js 如何知道接下来要做什么呢?这就要用到 回调函数(callback)。 回调本质上...

Selenium自动化测试入门指南

Selenium自动化测试入门指南

什么是自动化测试? 自动化测试是指利用软件工具自动执行测试用例,模拟用户操作,如打开网页、点击链接、输入文本等,并验证结果是否符合预期。 其主要优点包括: 大幅减少人工成本 测试速度快 可以在非工作时间运行 支持持续集成和交付 然而,它也存在一些局限性,例如开发成本较高、不适合快速变化的项目、依赖稳定的UI界面等。 自动化测试的应用条件 适合引入自动化测试的情况包括: 手动测试耗时且需要大量...

MariaDB Galera集群故障快速恢复指南

OpenStack控制节点采用三节点MariaDB Galera集群架构。当数据库集群因故障重启时,有时会出现Galera集群无法正常启动的问题。虽然有多种方法可以恢复数据库服务,但如何实现快速启动同时确保数据完整性呢? 通过分析日志发现,MariaDB Galera集群节点宕机时会在日志中输出以下信息: [Note] WSREP: 新集群视图:全局状态: 874d8e7e-5980-11e8-8...

Android 中 EventBus 的通信机制与实现原理深度解析

EventBus 核心设计思想 EventBus 是一个基于观察者模式的事件总线框架,广泛应用于 Android 平台以实现组件解耦。它通过中心化的消息分发机制,使不同层级、不同线程的对象能够以"发布-订阅"方式通信,避免了传统接口回调或广播带来的强依赖问题。 核心角色说明 事件(Event):任意 Java 对象,作为数据载体,如网络状态变更通知、用户登录信息等。 发布者(Publi...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。