Jmeter 脚本中使用base64 加解密、MD5加密

Jmeter 脚本中使用base64 加解密、MD5加密base64加密方式一:importorg.apache.commons.codec.binary.Base64;Stringaa=Base64.encodeBase64String(“${new_

在进行日常的性能测试工作中,难免会遇到请求参数需要进行加密传输的情况,笔者将根据自己在测试过程中遇到的问题,说明加密方法的使用(Jmeter 版本为5.1.1)

场景一:请求参数进行base64加密

场景说明:有A 、B两个请求,通过调用请求A,使用边界提取器获取A的响应中的cust_id值,使用beanShell 后置处理器对cust_id 进行base64 加密。加密后的数据再作为请求B的参数使用。

1. 编写Jmeter脚本结构

在这里插入图片描述
注意:beanShell 后置处理器不是在请求A的内部。

2. 在beanShell中调用base64加密方法

在这里插入图片描述
方法一:

import org.apache.commons.codec.binary.Base64;

String tmp = Base64.encodeBase64String("${cust_id}".getBytes("utf-8"));
log.info("===========" + tmp);
vars.put("b64_custId",tmp);

注意:如果使用上述代码加密后,调用B请求报错,可尝试更换加密方法二

方式二:

import sun.misc.BASE64Decoder;
String tmp = new sun.misc.BASE64Encoder().encode("${cust_id}".getBytes());
log.info("=================" + tmp);
vars.put("b64_custId", tmp);

3. 使用加密后的参数

在这里插入图片描述
通过查看结果数,可以看到入参中的cust_id已经变成了解密后的字符串
在这里插入图片描述

场景二:响应结果需要进行base64 解密

场景说明:在诸如APP或者小程序中出于安全性的考虑,请求的返回结果是经过base64加密之后的,我们需要进行解密后再判断请求是否成功。

1. Jmeter 脚本结构

在这里插入图片描述

import sun.misc.BASE64Decoder;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

String res = "eyJlcnJvckNvZGUiOiAiTVMwMDAwMDIiLCJlcnJvck1lc3NhZ2UiIDogIk1pc3NpbmcgUGFyYW1ldGVyIiwiZXJyb3JEZXNjcmlwdGlvbiI6ICJNaXNzaW5nIFBhcmFtZXRlci4ifQ==";
//String aa = prev.getResponseDataAsString(); // 获取上一个请求的结果
log.info("原始加密串:"+ res);

// base64解密
BASE64Decoder decoder = new BASE64Decoder();
String tmp = new String(decoder.decodeBuffer(res),"utf-8");
log.info("解密后的串:" + tmp);

// 字符串转json对象
JSONObject json = JSONObject.parseObject(tmp);
String code = json.getString("errorCode");
log.info("返回结果值:" + code);

// 判断结果
if(!code.equals("0")){ 
   
	Failure = true;
	}

代码说明:

  1. 字符串变量res 相当于是请求C的返回结果。你也可以用 prev.getResponseDataAsString()来直接获取上一次请求的全部返回结果。
  2. 调用base64的解密方法对字符串进行解密;
  3. 将解密后的字符串转换为json对象,目的是取出我们想要校验的字段,也可以用正则表达式提取想要校验的节点。
  4. 判断断言结果

场景三:请求参数中带有签名字段

场景说明:一般在APP的请求中会涉及到签名字段,比如前后端开发人员会协商一个key,用来和其他的字段一起通过md5加密后生产一个签名字段sign,再把该字段作为一个请求参数,比如:
https://xxx.xxx.xx/getinfo?timestamp=1587972142&appid=1231231231313&token=qwrqfqfqqtqg8&sign=tqwsvdfqqwreqrwqrqre==

生成签名的步骤:

  1. 先协商好密钥key=12431414141414144124
  2. 获取所有请求参数的字符串str1:appid=1231231231313&timestamp=1587972142&token=qwrqfqfqqtqg8
  3. 对str1 按照ASCII 进行排序,得到str2:
    appid=1231231231313&timestamp=1587972142&token=qwrqfqfqqtqg8
  4. 将str2 和 密钥key 进行拼接得到str3:
    appid=1231231231313&timestamp=1587972142&token=qwrqfqfqqtqg8&key=12431414141414144124
  5. 调用md5加密算法,对str3进行加密,从而得到sign签名字段的值。

1. Jmeter 脚本结构

在这里插入图片描述
说明:在需要使用签名字段的请求上面创建一个beanShell 预处理程序

2. 调用md5加密方法进行加密

步骤说明:

  1. 根据开发人员提供的key 先定义好待加密字符串(字符串中可能包含固定的字符串以及其他参数化变量)
  2. 调用md5加密方法,对字符串进行加密,生成签名字段后并报存到新的变量中,供下面的请求调用。
  3. 在后面的请求中引用签名字段
import org.apache.commons.codec.digest.DigestUtils;

String str = "appid=wxfe88409e05440687&timestamp=${__time(/1000,timeStamp)}&token=qrqvdstgertnberth9&key=0124428123123215641";
String sign = DigestUtils.md5Hex(str);
log.info(str);
vars.put("md5_sign",sign);

3. 引用签名字段

在这里插入图片描述在这里插入图片描述

后面将持续分享Jmeter在使用过程中的项目经验,如果帮到您,还请给个赞(:

今天的文章Jmeter 脚本中使用base64 加解密、MD5加密分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/60950.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注