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

news2025/3/11 18:12:58

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2313333.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mac本地部署Qwq-32b记录

导语 昨天看到阿里开源了Qwq-32b,号称性能可以媲美Deepseek-R1。今天晚上有空就在Mac上折腾了一下,使用ollma进行了部署,效果感觉还不错,特此记录。 环境 硬件 型号:Macbook M1 Pro 14寸内存:512G 环境…

【病毒分析】熊猫烧香病毒分析及其查杀修复

目录 前言 一、样本概况 1.1 样本信息 1.2 测试环境及工具 1.3 分析目标 二、具体行为分析 2.1 主要行为 2.1.1 恶意程序对用户造成的危害 2.2 恶意代码分析 2.2.1 加固后的恶意代码树结构图(是否有加固) 2.2.2 恶意程序的代码分析片段 三、解决方案(或总结) 3.1 …

【语料数据爬虫】Python实现将Json语料数据转换成Word文档

前言 本文是该专栏的第1篇,后面会持续分享Python爬虫采集各种语料数据的的干货知识,值得关注。 本专栏为笔者精心推出的“语料数据”爬虫专栏,特别适合需要写作素材的同学,该专栏文章以采集最新的“语料数据”为主,最终篇幅将涵盖【百万级语料数据】库。 值得一提的是,…

警惕AI神话破灭:深度解析大模型缺陷与禁用场景指南

摘要 当前AI大模型虽展现强大能力,但其本质缺陷可能引发系统性风险。本文从认知鸿沟、数据困境、伦理雷区、技术瓶颈四大维度剖析大模型局限性,揭示医疗诊断、法律决策等8类禁用场景,提出可信AI建设框架与用户防护策略。通过理论分析与实操案…

RoboVQA:机器人多模态长范围推理

23 年 11 月来自 Google Deepmind 的论文“RoboVQA: Multimodal Long-Horizon Reasoning for Robotics”。 本文提出一种可扩展、自下而上且本质多样化的数据收集方案,该方案可用于长期和中期的高级推理,与传统的狭窄自上而下的逐步收集相比&#xff0c…

C 语言数据结构(二):顺序表和链表

目录 1. 线性表 2. 顺序表 2.1 概念及结构 2.1.1 静态顺序表(不常用) 2.1.2 动态顺序表(常用) ​编辑 2.2 练习 2.2.1 移除元素 2.2.2 删除有序数组中的重复项 2.2.3 合并两个有序数组 2.3 顺序表存在的问题 3. 链表 …

无公网IP也能远程控制Windows:Linux rdesktop内网穿透实战

文章目录 前言1. Windows 开启远程桌面2. Linux安装rdesktop工具3. Win安装Cpolar工具4. 配置远程桌面地址5. 远程桌面连接测试6. 设置固定远程地址7. 固定地址连接测试 前言 如今远程办公已经从一种选择变成了许多企业和个人的必修课,而如何在Linux系统上高效地访…

uniapp+Vue3 开发小程序的下载文件功能

小程序下载文件&#xff0c;可以先预览文件内容&#xff0c;然后在手机上打开文件的工具中选择保存。 简单示例&#xff1a;&#xff08;复制到HBuilder直接食用即可&#xff09; <template><view class"container-detail"><view class"example…

blazemeter工具使用--用于自动生成jmeter脚本并进行性能测试

1、安装blazemeter&#xff08;网上有很多详情的教程&#xff09; 2、开始录制&#xff1a;设置号你的文件名称后开始录制 3、录制完成后保存为jmeter(jmx)文件 4、在jmeter中打开文件 5、添加一个后置处理器&#xff1a;查看结果树&#xff0c;后运行看看能否成功&#xf…

通义万相2.1:开启视频生成新时代

文章摘要&#xff1a;通义万相 2.1 是一款在人工智能视频生成领域具有里程碑意义的工具&#xff0c;它通过核心技术的升级和创新&#xff0c;为创作者提供了更强大、更智能的创作能力。本文详细介绍了通义万相 2.1 的背景、核心技术、功能特性、性能评测、用户反馈以及应用场景…

如何用HTML5 Canvas实现电子签名功能✍️

&#x1f916; 作者简介&#xff1a;水煮白菜王&#xff0c;一位资深前端劝退师 &#x1f47b; &#x1f440; 文章专栏&#xff1a; 前端专栏 &#xff0c;记录一下平时在博客写作中&#xff0c;总结出的一些开发技巧和知识归纳总结✍。 感谢支持&#x1f495;&#x1f495;&a…

区块链中的数字签名:安全性与可信度的核心

数字签名是区块链技术的信任基石&#xff0c;它像区块链世界的身份证和防伪标签&#xff0c;确保每一笔交易的真实性、完整性和不可抵赖性。本文会用通俗的语言&#xff0c;带你彻底搞懂区块链中的数字签名&#xff01; 文章目录 1. 数字签名是什么&#xff1f;从现实世界到区块…

表格columns拼接两个后端返回的字段(以umi框架为例)

在用组件对前端项目进行开发时&#xff0c;我们会遇到以下情况&#xff1a;项目原型中有取值范围这个表字段&#xff0c;需要存放最小取值到最大取值。 而后端返回给我们的数据是返回了一个最小值和一个最大值&#xff0c; 在columns中我们需要对这两个字段进行拼接&#xff0…

sparkTTS window 安装

SparkTTS 的简介 Spark-TTS是一种基于SpardAudio团队提出的 BiCodec 构建的新系统&#xff0c;BiCodec 是一种单流语音编解码器&#xff0c;可将语音策略性地分解为两种互补的标记类型&#xff1a;用于语言内容的低比特率语义标记和用于说话者特定属性的固定长度全局标记。这种…

【K8S系列】深入探究Kubernetes中查看日志的方法

在Kubernetes&#xff08;简称K8s&#xff09;的世界里&#xff0c;日志是诊断和排查问题的关键线索。无论是应用程序的运行状态、错误信息&#xff0c;还是系统的健康状况&#xff0c;都能从日志中找到蛛丝马迹。本文将详细介绍在K8s中查看日志的各种方法&#xff0c;从基础的…

JmeterHttp请求头管理出现Unsupported Media Type问题解决

JmeterHttp请求头管理出现Unsupported Media Type问题解决 大多数的app与pc端压测的时候都会出现这种情况 当我们在jemter测试当中当中遇见Unsupported Media Type&#xff0c;有一种可能就是我们请求的网页的content-Type的类型与我们测试的时候的类型不一致 解决方法 可以添…

十大数据科学Python库

十大数据科学Python库 1、NumPy&#xff1a;脊髓2、Pandas&#xff1a;数据操纵专家3、Matplotlib&#xff1a;艺术之魂4、Scikit-Learn&#xff1a;瑞士军刀5、TensorFlow&#xff1a;聪明的家伙6、PyTorch&#xff1a;叛逆者7、Selenium&#xff1a;操纵大师8、NLTK&#xff…

LabVIEW伺服阀高频振动测试

在伺服阀高频振动测试中&#xff0c;闭环控制系统的实时性与稳定性至关重要。针对用户提出的1kHz控制频率需求及Windows平台兼容性问题&#xff0c;本文重点分析NI PCIe-7842R实时扩展卡的功能与局限性&#xff0c;并提供其他替代方案的综合对比&#xff0c;以帮助用户选择适合…

解决asp.net mvc发布到iis下安全问题

解决asp.net mvc发布到iis下安全问题 环境信息1.The web/application server is leaking version information via the "Server" HTTP response2.确保您的Web服务器、应用程序服务器、负载均衡器等已配置为强制执行Strict-Transport-Security。3.在HTML提交表单中找不…

CSS-基础选择器,字体属性,文本属性介绍

一、CSS 简介 CSS 是层叠样式表 ( Cascading Style Sheets ) 的简称. 有时我们也会称之为 CSS 样式表或级联样式表&#xff61; CSS 是也是一种标记语言 CSS 主要用于设置 HTML 页面中的文本内容(字体&#xff64;大小&#xff64;对齐方式等)&#xff64;图片的外形(宽高&a…