JMeter对接口返回值进行AES解密

本文将从零开始,详细演示如何用JMeter实现接口返回值的AES解密,涵盖环境准备、脚本编写到结果验证的全流程。


1. 环境准备
  • 安装JMeter:从官网下载最新版(建议5.4+)
  • 安装插件
    1. 安装Custom JAR Functions插件(用于AES解密)
    2. Apache Commons Codec库的JAR文件放入JMeter的/lib目录(提供Base64解码支持)
  • 接口信息(示例):
    • 接口地址:https://api.example.com/encrypted-data
    • 返回格式:{"data": "AES加密的Base64字符串"}

2. 创建测试计划
  1. 新建线程组
    右键测试计划 → 添加 → 线程(用户) → 线程组
  2. 添加HTTP请求
    右键线程组 → 添加 → 取样器 → HTTP请求
    配置参数:
  • 协议:HTTPS
  • 服务器:api.example.com
  • 路径:/encrypted-data
  • 方法:GET

3. 提取加密数据
  1. 添加JSON提取器
    右键HTTP请求 → 添加 → 后置处理器 → JSON提取器
    配置:
  • 变量名称:encryptedData
  • JSON路径:$.data
  1. 添加调试取样器(可选)
    右键线程组 → 添加 → 取样器 → 调试取样器 → 验证变量值

4. 实现AES解密

添加JSR223 PostProcessor
右键HTTP请求 → 添加 → 后置处理器 → JSR223 PostProcessor
选择语言:Groovy,粘贴以下脚本:

import javax.crypto.Cipher
import javax.crypto.spec.SecretKeySpec
import javax.crypto.spec.IvParameterSpec
import org.apache.commons.codec.binary.Base64

// 1. 获取加密数据
String encryptedBase64 = vars.get("encryptedData")
byte[] encryptedBytes = Base64.decodeBase64(encryptedBase64)

// 2. 配置AES参数(需替换为实际值)
String algorithm = "AES/CBC/PKCS5Padding"  // 模式/填充方式
String key = "0123456789abcdef"            // 16字节密钥(示例)
String iv = "1234567890abcdef"              // 16字节初始向量(示例)

// 3. 初始化解密器
SecretKeySpec secretKey = new SecretKeySpec(key.getBytes("UTF-8"), "AES")
IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes("UTF-8"))
Cipher cipher = Cipher.getInstance(algorithm)
cipher.init(Cipher.DECRYPT_MODE, secretKey, ivSpec)

// 4. 执行解密
byte[] decryptedBytes = cipher.doFinal(encryptedBytes)
String decryptedText = new String(decryptedBytes, "UTF-8")

// 5. 存储解密结果
vars.put("decryptedResult", decryptedText)
log.info("解密结果: " + decryptedText)  // 控制台输出

参数说明

  • key:必须与加密方一致(长度16/24/32字节对应AES-128/192/256)
  • iv:CBC模式必需,ECB模式可删除相关代码
  • algorithm:常见组合:
    • AES/CBC/PKCS5Padding
    • AES/ECB/PKCS5Padding

5. 验证解密结果
  1. 添加查看结果树
    右键线程组 → 添加 → 监听器 → 查看结果树
    运行测试后检查:
  • HTTP响应中的加密数据
  • decryptedResult变量的明文
  1. 添加断言(示例)
    右键HTTP请求 → 添加 → 断言 → 响应断言
    配置:
  • 测试字段:JSR223变量
  • 变量名:decryptedResult
  • 模式匹配:期望的明文(如"success"

6. 完整测试结构
线程组
HTTP请求
JSON提取器
JSR223 PostProcessor
断言
查看结果树

常见问题解决
  1. 解密失败:InvalidKeyException
    • 检查密钥长度是否符合AES标准
    • 确认JMeter的/lib目录包含JCE无限强度策略文件(解决256位密钥限制)
  2. 乱码问题
    • new String()中指定编码:new String(decryptedBytes, "UTF-8")
  3. Base64错误
    • 检查返回数据是否为标准Base64(可使用在线工具验证)

最佳实践
  1. 参数化密钥
    将密钥存储在CSV文件中,用${__CSVRead(keyfile.csv,0)}读取
  2. 封装函数
    将解密代码封装为JMeter函数(需扩展org.apache.jmeter.functions.AbstractFunction
  3. 性能优化
    setup线程组中初始化Cipher对象,避免每次请求重复创建

通过以上步骤,您已实现JMeter自动化解密接口返回值的全流程。实际应用时需根据接口文档调整AES参数,确保与加密方配置一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值