这里我们用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);