当前位置: 首页 > news >正文

使用Beanshell前置处理器对Jmeter的请求body进行加密

这里我们用HmacSHA256来进行加密举例:

步骤:

1.先获取请求参数并对请求参数进行处理(处理成String类型)

//处理请求参数的两种方法:
//方法一:
//获取请求
Arguments args = sampler.getArguments();
//转化为String字符串,因直接用args.toString()转结果后前面带了“=”号,后面带有“()”,所以要用replace()先把把括号去掉
String data = args.toString().replace("(", "").replace(")", "");

//因为获取到的字符串是从“=”号开始的,所以用substring(1)方法表示从第二个字符开始获取
String body = data.substring(1);


//方法二:
//获取请求参数
Arguments args = sampler.getArguments();
log.info(""+args);
//保存到Map数组里面
Map reqMap = args.getArgumentsAsMap();

String body = "";
//循环key
for (String key : reqMap.keySet()) {
	//获取key对应的值
	body = reqMap.get(key);
  	log.info("------------------"+body);
}

2.对数据进行加密————两种方法

1).直接在Beashell中进行加密

//获取密钥
String certkey = "******";  //这个是公司自己的密钥

//创建实例
Mac hmacSHA256 = Mac.getInstance("HmacSHA256");
SecretKeySpec secertKey = new SecretKeySpec(certkey.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
hmacSHA256.init(secertKey);

//计算签名
byte[] hmacResult = hmacSHA256.doFinal(body.getBytes(StandardCharsets.UTF_8));
String signature = new String(Base64.getEncoder().encode(hmacResult), StandardCharsets.UTF_8);

2).在java里面编写好加密方法,导出jar包,把导出的jar包放入C:\*****\apache-jmeter-5.5\lib\ex目录下————(看补充部分)。

3.把加密后的参数保存到变量中,方面后面引用

vars.put("check_data",signature);

整体代码展示:

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import org.apache.jmeter.config.Arguments;


//获取请求参数的两种方法:
//方法一:
获取请求参数
//Arguments args = sampler.getArguments();
//log.info(""+args);
转化为String字符串,因直接用args.toString()转结果后前面带了“=”号,后面带有“()”,所以要用replace()先把把括号去掉
//String data = args.toString().replace("(", "").replace(")", "");
//log.info("1-------------------------"+data);
//
因为获取到的字符串是从“=”号开始的,所以用substring(1)方法表示从第二个字符开始获取
//String body = data.substring(1);

//log.info("2----------------------------------------------"+body);


//方法二:
//获取请求参数
Arguments args = sampler.getArguments();
log.info(""+args);
//保存到Map数组里面
Map reqMap = args.getArgumentsAsMap();

String body = "";
//循环key
for (String key : reqMap.keySet()) {
	//获取key对应的值
	body = reqMap.get(key);
  	log.info("------------------"+body);
}


//获取密钥
String certkey = "******************";  


调用encodeSHA256方法
//String encode_str = HmacSHA256.encodeSHA256(certkey,body);

//创建实例
Mac hmacSHA256 = Mac.getInstance("HmacSHA256");
SecretKeySpec secertKey = new SecretKeySpec(certkey.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
hmacSHA256.init(secertKey);

//计算签名
byte[] hmacResult = hmacSHA256.doFinal(body.getBytes(StandardCharsets.UTF_8));
String signature = new String(Base64.getEncoder().encode(hmacResult), StandardCharsets.UTF_8);
vars.put("Check_data",signature);

补充.在java里面编写好加密方法,导出jar包,把导出的jar包放入C:\*****\apache-jmeter-5.5\lib\ex目录下

1.创建一个新的Maven项目

2.编写java代码:

package com.test.hmacSHA256;

import com.alibaba.fastjson.JSONObject;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

public class HmacSHA256 {

    public static String encodeSHA256(String cerKey, String data) throws NoSuchAlgorithmException, InvalidKeyException {
        //创建实例
        Mac hmacSHA256 = Mac.getInstance("HmacSHA256");
        SecretKeySpec secertKey = new SecretKeySpec(cerKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
        hmacSHA256.init(secertKey);

        //计算签名
        byte[] hmacResult = hmacSHA256.doFinal(data.getBytes(StandardCharsets.UTF_8));

        // 返回加密后的字符串
        return new String(Base64.getEncoder().encode(hmacResult), StandardCharsets.UTF_8);

    }

}

3.导出jar包:

先点clean,再点package,最后在target目录下出现了jar包

4.把jar包放进C:\*****\apache-jmeter-5.5\lib\ex目录下

5.Beashell 里面导入包

import com.test.hmacSHA256.HmacSHA256;  //导入类,也就是类的路径

6.调用方法:

//调用encodeSHA256方法
String encode_str = HmacSHA256.encodeSHA256(certkey,body);

7.Beashell 整体代码展示

import org.apache.jmeter.config.Arguments;

import com.test.hmacSHA256.HmacSHA256;  //导入类,也就是类的路径


//获取请求参数的两种方法:
//方法一:
获取请求参数
//Arguments args = sampler.getArguments();
//log.info(""+args);
转化为String字符串,因直接用args.toString()转结果后前面带了“=”号,后面带有“()”,所以要用replace()先把把括号去掉
//String data = args.toString().replace("(", "").replace(")", "");
//log.info("1-------------------------"+data);
//
因为获取到的字符串是从“=”号开始的,所以用substring(1)方法表示从第二个字符开始获取
//String body = data.substring(1);

//log.info("2----------------------------------------------"+body);


//方法二:
//获取请求参数
Arguments args = sampler.getArguments();
log.info(""+args);
//保存到Map数组里面
Map reqMap = args.getArgumentsAsMap();

String body = "";
//循环key
for (String key : reqMap.keySet()) {
	//获取key对应的值
	body = reqMap.get(key);
  	log.info("------------------"+body);
}


//获取密钥
String certkey = "********************";  


//调用encodeSHA256方法
String encode_str = HmacSHA256.encodeSHA256(certkey,body);

//把加密好的字符串添加到check_data变量中,后面需要用就直接用${x-checkSum}进行引用
vars.put("check_data",encode_str);

相关文章:

  • Ubuntu20.04安装运行DynaSLAM
  • cocos creator 3.8如何在代码中打印drawcall,fps
  • 交换机HSRP与VRRP的全面深入对比
  • 在 Windows 系统下使用 VMware 安装 Ubuntu 24.04 LTS 系统
  • 【设计模式】建造者模式——工厂模式
  • 文件解析漏洞靶场解析全集详解
  • 一次ORACLE 10G数据库REDO LOG损坏报错的解决办法ORA-00354: corrupt redo log block header
  • 纳米压印技术制备AR眼镜的参考步骤
  • React-dnd 拖拽排序,指定拖拽触发节点,拖拽预览图
  • Python开发合并多个PDF文件
  • 后端 - java - - 重写与重载的区别
  • Chatbox通过百炼调用DeepSeek
  • 医疗APP开发如何实现跨机构数据互通
  • 【HeadFirst系列之HeadFirstJava】第17天之深入解析 Java 包与 JAR:从代码组织到应用发布全流程(含实战)
  • FX-std::vector排序
  • SQLite Truncate Table
  • Selenium Manager和webdriver manager的区别与联系
  • chebykan阅读收尾
  • 数组逆序重存放(信息学奥赛一本通-1105)
  • 版本控制器Git(5)
  • 会谈时间迟迟未定、核心议题存在分歧,俄乌“土耳其谈判”一波三折
  • 微软将裁员3%,减少管理层
  • “异常”只停留在医院里,用艺术为“泡泡宝贝”加油
  • “典孝急乐批麻蚌赢”:互联网“八字真言”与当代赛博赢学
  • 京东美团饿了么等外卖平台被约谈
  • 体坛联播|巴萨4比3打服皇马,利物浦2比2战平阿森纳