Jmeter篇之beanshell加密和解密(SM2)

2023-11-20

需求

  • 明文传参,对请求进行加密调用后台接口,后端返回密文响应结果,对返回结果进行解密
    需求分析:
    (1)参数明文填写入参
    (2)发送请求前对明文进行加密,加密后调用后台接口
    (3)后端返回密文响应结果
    (4)对响应结果进行解密

操作

1、打开jmeter,选中测试计划—右键—添加—线程用户—线程组
2、选中线程组,右键—添加—取样器—http请求
3、选中http请求,右键—添加–前置处理器—用户参数
4、选中http请求,右键—添加–前置处理器—beanshell预处理程序
5、选中http请求,右键—添加–后置处理器—beanshell后置处理程序

加密

1、添加用户参数
在这里插入图片描述
2、添加计数器,用来往数据库中添加基础数据,手机号、姓名、住址等不重复。
在这里插入图片描述
在这里插入图片描述

3、用户参数中新增变量,引用计数器中的‘引用名称’,计数器在本文章中没有任务作用,只是说明可以这么使用,用户参数是有用的。
在这里插入图片描述
4、在http请求中添加beanshell预处理程序。
在这里插入图片描述
5、对输入的明文参数进行加密
在这里插入图片描述

import cn.hutool.core.codec.Base64;
import cn.hutool.core.util.HexUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.SM2;
import java.security.KeyPair;

        log.info("加密开始:" ); 

        String timeSpan = StrUtil.toString(System.currentTimeMillis());  //获取时间戳
        String encData = vars.get("drcxencData");//获取东软明文参数,将获取的值保存在encData字段,drcxencData为用户参数中的drcxencData
        vars.put("time", timeSpan);//将获取的时间戳保存在time字段中

        privateKey="XXX";//私钥
        publicKey="MMM";//公钥
        
        SM2 sm2= SmUtil.sm2(privateKey,publicKey);
        String encryptstr = sm2.encryptBcd(encData, KeyType.PublicKey);//SM2加密
        log.info("加密数据:" + encryptstr);//加密数据打印日志
        vars.put("encode", encryptstr);//加密后的数据放在encode字段中,http请求时密文请求,需要传该字段

        String sign1 = sm2.signHex(HexUtil.encodeHexStr(encData+timeSpan));//验签
        log.info("签名:" + sign1);        
        vars.put("sign", sign1);//验签数据保存在sign字段中,方便后续验签使用


6、发送http请求,请求中密文传送数据

在这里插入图片描述
body中传参使用对应前置处理器中获取的字段
在这里插入图片描述
7、加密成功在这里插入图片描述

解密

1、http请求中添加后置处理器-beanshell后置处理器
在这里插入图片描述

 import cn.hutool.core.codec.Base64;
import cn.hutool.core.util.HexUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.SM2;
import java.security.KeyPair;
import com.alibaba.fastjson.JSONObject;
       //测试公钥和私钥
        String privateKey="xxx";
        String publicKey="mmm";
        SM2 sm2= SmUtil.sm2(privateKey,publicKey);

        //获取时间戳
        String timeSpan = StrUtil.toString(System.currentTimeMillis());
        //获取用户参数中的drcxencData
        String encData = vars.get("drcxencData");
        //解密
        String encryptstr = sm2.encryptBcd(encData, KeyType.PublicKey);        
        log.info("解密开始:" ); 
        String ke1 = prev.getResponseDataAsString();
        log.info("解密响应密文:" + ke1);
	   JSONObject jsonObject = JSONObject.parseObject(ke1);
	   String encData = jsonObject.getJSONObject("result").getString("encData");
        log.info("解密前encData:" + encData);
        String decryptstr =StrUtil.utf8Str(sm2.decryptFromBcd(encData,KeyType.PrivateKey));
        log.info("解密后encData:" + decryptstr);
        vars.put("decode", decryptstr);
        //验签
        String sign1 = sm2.signHex(HexUtil.encodeHexStr(encData+timeSpan));
        boolean verify = sm2.verifyHex(HexUtil.encodeHexStr(encData+timeSpan), sign1);
        log.info("验签数据:" + verify);  

由于接口现在异常,无法获取,之前调试的时候是可以的,可以根据hutool封装的插件,根据里边的样例去写。

https://doc.hutool.cn/pages/index

hutool工具类

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jmeter篇之beanshell加密和解密(SM2) 的相关文章

随机推荐

  • 七段码(建图+搜索+并查集)

    思路 step1 邻接表建图 相邻为1 不相邻为0 题目就等价为在图中求连通子图的个数 step2 深度搜索每条边 并存储下来 step3 对选择的边用并查集保存下来 然后看father i i的个数 等于1 表示连通 否则表示不连通 易错
  • 【SpringCloud】整合Consul+OpenFeign实现微服务+负载均衡(下)

    一 代码 由于篇幅有限 代码见上一篇文章 https blog csdn net forest long article details 129287941 分别启动Consul Service provider Service consu
  • QString::arg() 函数

    例 setWindowTitle tr 1 2 arg shownName arg tr Spreadsheet QString arg 函数用第一个arg 调用会替换 1 第2个arg 调用会替换 2 上面的例子其实可以写作 setWin
  • H5.小程序都适用的瀑布流做法

    1 HTML代码 div style display flex padding top 0 2rem div class card main left div div
  • 常用设计模式及例子(五)

    13 策略模式 strategy 策略模式定义了一系列算法 并将每个算法封装起来 使他们可以相互替换 且算法的变化不会影响到使用算法的客户 需要设计一个接口 为一系列实现类提供统一的方法 多个实现类实现该接口 设计一个抽象类 可有可无 属于
  • java实现音频文件的播放

    实现思路 1 首先获取音频文件的地址 然后通过IO流读取音频文件 加缓冲区 实现Player类的对象 2 Player类主要用于播放器的初始化 以及通过它来实现一些音视频文件的播放 这个类需要手动去网上下载 然后添加路径到我们Eclipse
  • 关于.net连接字符串

    今天在看David Sceppa的 ADO NET 技术内幕 里面对 net连接字符串的描述很简单 让人一看就懂 一看能理解 连接字符串是什么 连接字符串是由一系列用分号隔开的 name value 组合 strConn Setting1
  • centos 通过yum安装nginx

    通过yum安装nginx 菜鸟一枚 不知道为什么nginx这个东西不在初始话的yum镜像里面 也不想通过编译方式安装nginx 看着闹心 那么怎么通过yum方式安装nginx呢 添加nginx包镜像地址 rpm ivh http nginx
  • python---函数名的使用

    函数名的多种用法 函数名当作变量名赋值 函数名当作函数的实参 函数名当作函数的返回值 函数名当作容器类型的元素 函数名当作变量名赋值 def index print from function index print index res i
  • android调用系统指纹设置页面录入指纹

    在做指纹登录时 有时候会遇到设备并未录入指纹 需要提示用户去开启 如果需要自动跳转到系统的指纹设置页面 录入指纹 那就需要调用系统组件 由于google加入指纹支持是在6 0 而国内很多厂商很早便加入了指纹支持 所以在这方面碎片化很严重 需
  • 火影手游为什么服务器维护,火影忍者手游安装失败解决方法 游戏闪退进不去怎么办...

    本文4399阿尔法将告诉大家火影忍者手游安装失败的原因以及解决方法 还会告诉大家游戏闪退进不去怎么办等等 下面就跟着小编一起来看看吧 gt gt gt gt gt 更多游戏攻略 进入4399火影忍者手游专区 lt lt lt lt lt 问
  • 65nm芯片流片费用_每年流片超40款客户芯片,国内第一的IP供应商芯原科创板上市获受理...

    文 Lee 图源 网络 集微网消息 9月20日 上交所受理了芯原微电子 上海 股份有限公司 以下简称 芯原 科创板上市申请 芯原选择的上市标准为 科创板上市规则 2 1 2中的第 四 项 预计市值不低于人民币30亿元 且最近一年营业收入不低
  • vscode配置clangd和clang-format

    vscode安装和配置 如何安装和配置vscode以搭建c 开发环境 可以查看我的另一篇博客 Windows上最轻量的vscode C 开发环境搭建 在这篇博客中 详细介绍了如何安装vscode以及应该安装哪些插件 这里不再赘述 vscod
  • 第14届蓝桥杯C++B组省赛

    文章目录 A 日期统计 B 01 串的熵 C 冶炼金属 D 飞机降落 E 接龙数列 F 岛屿个数 G 子串简写 H 整数删除 I 景区导游 J 砍树 今年比去年难好多 Update 2023 4 10 反转了 炼金二分没写错 可以AC了 U
  • 1051. 复数乘法 (15)

    复数可以写成 A Bi 的常规形式 其中A是实部 B是虚部 i是虚数单位 满足i2 1 也可以写成极坐标下的指数形式 R e Pi 其中R是复数模 P是辐角 i是虚数单位 其等价于三角形式 R cos P isin P 现给定两个复数的R和
  • 【机器学习】【逻辑回归】Logistic函数/Sigmoid函数的详细公式推导

    sigmoid函数的数学公式 sigmoid函数的因变量x取值范围是 到 但是sigmoid函数的值域是 0 1 不管x取什么值其对应的sigmoid函数值一定会落到 0 1 范围内 漂亮的logistic 曲线 sigmoid函数对应的图
  • Python timeit模块的使用

    Python timeit模块的使用 Python 中的 timeit 模块可以用来测试一段代码的执行耗时 如一个变量赋值语句的执行时间 一个函数的运行时间等 timeit 模块是 Python 标准库中的模块 无需安装 直接导入就可以使用
  • java readvalue_Java XmlMapper.readValue方法代碼示例

    本文整理匯總了Java中com fasterxml jackson dataformat xml XmlMapper readValue方法的典型用法代碼示例 如果您正苦於以下問題 Java XmlMapper readValue方法的具體
  • CUDA流任务并行

    CUDA流表示一个GPU操作队列 并且该队列中的操作将以指定的顺序执行 可以将每个流视为GPU的一个任务 并且这些任务可以并行执行 即相同流顺序执行 不同流并行执行 不同流并行执行时不同流所要执行的任务要没有依赖关系 当不手动创建流时 cu
  • Jmeter篇之beanshell加密和解密(SM2)

    需求 明文传参 对请求进行加密调用后台接口 后端返回密文响应结果 对返回结果进行解密 需求分析 1 参数明文填写入参 2 发送请求前对明文进行加密 加密后调用后台接口 3 后端返回密文响应结果 4 对响应结果进行解密 操作 1 打开jmet