美丽的神话 发表于 2025-3-11 09:59:45

利用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包
https://i-blog.csdnimg.cn/direct/08b7dc4963074aec9e002ea51e2af895.png
4.把jar包放进C:\*****\apache-jmeter-5.5\lib\ex目录下
https://i-blog.csdnimg.cn/direct/eea58443f6444944b4afb274aff8ff08.png
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 = "";//循环keyfor (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);

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 利用Beanshell前置处理器对Jmeter的请求body举行加密