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

打印 上一主题 下一主题

主题 1682|帖子 1682|积分 5046

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这里我们用HmacSHA256来举行加密举例:
步骤:
1.先获取请求参数并对请求参数举行处理(处理成String类型)

  1. //处理请求参数的两种方法:
  2. //方法一:
  3. //获取请求
  4. Arguments args = sampler.getArguments();
  5. //转化为String字符串,因直接用args.toString()转结果后前面带了“=”号,后面带有“()”,所以要用replace()先把把括号去掉
  6. String data = args.toString().replace("(", "").replace(")", "");
  7. //因为获取到的字符串是从“=”号开始的,所以用substring(1)方法表示从第二个字符开始获取
  8. String body = data.substring(1);
  9. //方法二:
  10. //获取请求参数
  11. Arguments args = sampler.getArguments();
  12. log.info(""+args);
  13. //保存到Map数组里面
  14. Map reqMap = args.getArgumentsAsMap();
  15. String body = "";
  16. //循环key
  17. for (String key : reqMap.keySet()) {
  18.         //获取key对应的值
  19.         body = reqMap.get(key);
  20.           log.info("------------------"+body);
  21. }
复制代码
2.对数据举行加密————两种方法

1).直接在Beashell中举行加密
  1. //获取密钥
  2. String certkey = "******";  //这个是公司自己的密钥
  3. //创建实例
  4. Mac hmacSHA256 = Mac.getInstance("HmacSHA256");
  5. SecretKeySpec secertKey = new SecretKeySpec(certkey.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
  6. hmacSHA256.init(secertKey);
  7. //计算签名
  8. byte[] hmacResult = hmacSHA256.doFinal(body.getBytes(StandardCharsets.UTF_8));
  9. String signature = new String(Base64.getEncoder().encode(hmacResult), StandardCharsets.UTF_8);
复制代码
2).在java里面编写好加密方法,导出jar包,把导出的jar包放入C:\*****\apache-jmeter-5.5\lib\ex目录下————(看增补部分)。
3.把加密后的参数生存到变量中,方面背面引用

  1. vars.put("check_data",signature);
复制代码
整体代码展示:
  1. import javax.crypto.Mac;
  2. import javax.crypto.spec.SecretKeySpec;
  3. import java.nio.charset.StandardCharsets;
  4. import java.util.Base64;
  5. import org.apache.jmeter.config.Arguments;
  6. //获取请求参数的两种方法:
  7. //方法一:
  8. 获取请求参数
  9. //Arguments args = sampler.getArguments();
  10. //log.info(""+args);
  11. 转化为String字符串,因直接用args.toString()转结果后前面带了“=”号,后面带有“()”,所以要用replace()先把把括号去掉
  12. //String data = args.toString().replace("(", "").replace(")", "");
  13. //log.info("1-------------------------"+data);
  14. //
  15. 因为获取到的字符串是从“=”号开始的,所以用substring(1)方法表示从第二个字符开始获取
  16. //String body = data.substring(1);
  17. //log.info("2----------------------------------------------"+body);
  18. //方法二:
  19. //获取请求参数
  20. Arguments args = sampler.getArguments();
  21. log.info(""+args);
  22. //保存到Map数组里面
  23. Map reqMap = args.getArgumentsAsMap();
  24. String body = "";
  25. //循环key
  26. for (String key : reqMap.keySet()) {
  27.         //获取key对应的值
  28.         body = reqMap.get(key);
  29.           log.info("------------------"+body);
  30. }
  31. //获取密钥
  32. String certkey = "******************";  
  33. 调用encodeSHA256方法
  34. //String encode_str = HmacSHA256.encodeSHA256(certkey,body);
  35. //创建实例
  36. Mac hmacSHA256 = Mac.getInstance("HmacSHA256");
  37. SecretKeySpec secertKey = new SecretKeySpec(certkey.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
  38. hmacSHA256.init(secertKey);
  39. //计算签名
  40. byte[] hmacResult = hmacSHA256.doFinal(body.getBytes(StandardCharsets.UTF_8));
  41. String signature = new String(Base64.getEncoder().encode(hmacResult), StandardCharsets.UTF_8);
  42. vars.put("Check_data",signature);
复制代码

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

1.创建一个新的Maven项目
2.编写java代码:
  1. package com.test.hmacSHA256;
  2. import com.alibaba.fastjson.JSONObject;
  3. import javax.crypto.Mac;
  4. import javax.crypto.spec.SecretKeySpec;
  5. import java.nio.charset.StandardCharsets;
  6. import java.security.InvalidKeyException;
  7. import java.security.NoSuchAlgorithmException;
  8. import java.util.Base64;
  9. public class HmacSHA256 {
  10.     public static String encodeSHA256(String cerKey, String data) throws NoSuchAlgorithmException, InvalidKeyException {
  11.         //创建实例
  12.         Mac hmacSHA256 = Mac.getInstance("HmacSHA256");
  13.         SecretKeySpec secertKey = new SecretKeySpec(cerKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
  14.         hmacSHA256.init(secertKey);
  15.         //计算签名
  16.         byte[] hmacResult = hmacSHA256.doFinal(data.getBytes(StandardCharsets.UTF_8));
  17.         // 返回加密后的字符串
  18.         return new String(Base64.getEncoder().encode(hmacResult), StandardCharsets.UTF_8);
  19.     }
  20. }
复制代码
3.导出jar包:
先点clean,再点package,末了在target目录下出现了jar包

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

5.Beashell 里面导入包
  1. import com.test.hmacSHA256.HmacSHA256;  //导入类,也就是类的路径
复制代码
6.调用方法:
  1. //调用encodeSHA256方法
  2. String encode_str = HmacSHA256.encodeSHA256(certkey,body);
复制代码
7.Beashell 整体代码展示
  1. import org.apache.jmeter.config.Arguments;import com.test.hmacSHA256.HmacSHA256;  //导入类,也就是类的路径
  2. //获取请求参数的两种方法://方法一:获取请求参数//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方法
  3. String encode_str = HmacSHA256.encodeSHA256(certkey,body);//把加密好的字符串添加到check_data变量中,背面必要用就直接用${x-checkSum}举行引用vars.put("check_data",encode_str);
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美丽的神话

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表