最近刚好在弄jmeter加密解密,可以分享下。(有一段时间没写了,有点不知道从何写起,这篇写的有点乱o(╥﹏╥)o)

需求是:接口中的请求体的部分参数需要先加密再请求,返回的结果中部分字段需解密。

1、首先,先按照正常的请求弄好。

2、然后,将开发提供给测试的加密解密的jar包添加到测试计划。当然,也可以直接将这些jar包放到jmeter安装目录jmeter\apache-jmeter-5.1.1\lib\ext中,这样就不用添加到测试计划中。(jar包有时候提供不齐全,如何确认自己的jar包是齐全的,下面会讲解) 

3、然后,在请求下新建Beanshell预处理程序,像我们添加的这些jar包,Beanshell预处理程序也需要导入,这里的导入用import就行。(因为jar包里都是class文件,其实是看不到实际代码的,如何想看加密解密对应的方法,可以跟开发要这个加密解密类(RSAUtils)的java文件)

Beanshell与java编码是一样的逻辑,只是有些类型格式不同。

4、然后,下面就可以编写代码了。按照RSAUtils.java文件,加密有2种,私钥加密和公钥加密,对应的解密分别为私钥解密和公钥解密。这里只用一个讲解,用的例子是公钥加密和公钥解密。

公钥加密的方法是publicEncrypt(data, publicKey),也就是说我们需要设置2个变量:data和publicKey。其中data是json格式的。

先按照最简单的思路写,为了保证beanshell预处理程序里的代码是可以正常使用,先写死data和publicKey公钥的数值。(这里需要注意的一点是json在jmeter的beanshell中需要转义,不然会报错)

如果json不转义,会报错。比如:

String data = "{"a":"2","b":"3"}";

System.out.println("json:"+data);//打印

日志报错信息:

2020-04-10 14:11:43,543 ERROR o.a.j.u.BeanShellInterpreter: Error invoking bsh method: eval In file: inline evaluation of: ``import xxx

(如果json数值里本身有部分是有转义符的,则需要二次转义) 

5、从RSAUtils.java文件中可以看到加密的方式publicEncrypt(data, publicKey),那我想拿到加密结果,那么也就是RSAUtils.publicEncrypt(data, publicKey)。那么beanshell预处理程序的加密代码就写好了:

打印出结果,这里看到已经加密成功了。 

6、我们需要怎么将加密后的数值给到请求体中呢?如果直接使用beanshell预处理定义的加密结果encryptMsg变量,执行:  

那么我们就需要定义一个全局变量,设置在测试计划中,我这里设置为sas,beanshell也需要加一行代码:vars.put("sas",encryptMsg);//将加密后的值赋值给全局变量

执行,看下结果:可以看到请求体已经拿到加密后的数值了。 

到这里,加密就完成了。

如何判断jar包是否齐全:

这里我先注释掉一部分导入jar包和类,执行以下,会发现提示没找到JSONObject类和RSAUtils.publicEncrypt方法。因为一直提示这个,但又不知道是缺少了哪些jar包。一次偶然下,加了try{}catch(){},发现会提示具体少了哪些类,就可以让开发提供对应的jar包啦~

加了try{}catch(){}后,执行,发现会提示具体少了哪些jar包: 

发现缺少com/baomidou/mybatisplus/toolkit/IOUtils,让开发导出对应的jar包,假设这个jar包名称:mybatisplussup,那么我们需要在测试计划中添加这个jar包,且beanshell预处理程序中,需要加2行代码:import mybatisplussupport.*;

import com.baomidou.mybatisplus.toolkit.IOUtils;

总结:日志是显示语法错误,比如未定义变量;但要看编译错误,用try{}catch(){}查看问题更加直观。

jmeter加密解密(加密篇)的更多相关文章

  1. AES加密解密 加密解密使用

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Sec ...

  2. web.config中连接字符串的读写和加密解密

    转载:https://www.cnblogs.com/shuai/articles/2248703.html 1.先来看看如何在web.config中写入数据库连接字符串.打开web.config文件 ...

  3. 支付接口中常用的加密解密以及验签rsa,md5,sha

    一.常用加密类型分类 1.对称加密:采用单钥对信息进行加密和解密,即同一个秘钥既可以对信息进行加密,也可以进行解密.此类型称之为对称加密.特点速度快,常用于对大量数据信息或文件加密时使用.常用例子:D ...

  4. C# RSACryptoServiceProvider加密解密签名验签和DESCryptoServic

    C#在using System.Security.Cryptography下有 DESCryptoServiceProvider RSACryptoServiceProvider DESCryptoS ...

  5. RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密

    原文:RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密 C#在using System.Security.Cryptograph ...

  6. Hash算法——加密解密说明

    MD5 pmd5-md5加密解密 加密类型识别工具 hash-identifier

  7. .NET进阶篇04-Serialize序列化、加密解密

    知识需要不断积累.总结和沉淀,思考和写作是成长的催化剂这篇很轻松,没有什么费脑子的,所以解析较少,代码较多,为数不多的拿来即用篇整个章节分布请移步 内容目录 一.概述二.序列化1.二进制文件2.XML ...

  8. loadrunder之脚本篇——加密解密

    密码加密 可以给密码加密,意在把结果字符串作为脚本的参数或者参数值.例如,完整可能有一个用户密码填写的表单,你想测试网站针对不同密码的反应,但是你又想保护密码的安全.Password Encoder允 ...

  9. PHP AES的加密解密

    AES加密算法 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DE ...

随机推荐

  1. 【网络编程】TCPIP-7-域名与网络地址

    目录 前言 7. 域名与网络地址 7.1 IP 7.2 域名 7.3 DNS 7.4 IP地址与域名之间的转换 7.4.1 利用域名获取IP地址 7.4.2 利用IP地址获取域名 7.4.3 升级版的 ...

  2. pip的问题 Can't connect to HTTPS URL because the SSL module is not available

    pip is configured with locations that require TLS/SSL, however the ssl module in Python is not avail ...

  3. rsync基本使用

    概念 rsync是linux系统下的数据镜像备份工具.使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH.rsync主机同步. 目前,已支持跨平台,可以在Windo ...

  4. k8s 执行 ingress yaml 文件报错: error when creating "ingress-myapp.yaml": Internal error occurred: failed calling webhook

    k8s 执行 ingress yaml 文件报错:错误如下: [root@k8s-master01 baremetal]# kubectl apply -f ingress-test.yaml Err ...

  5. UDP与TCP的对比

    参考网址:https://blog.csdn.net/m0_38121874/article/details/82914634 1.报头(1)TCP协议报头TCP指传输控制协议,其报头格式如下: TC ...

  6. 多线程之旅(9)_如何安全的取消正在执行的线程——附C#源码

    参考网址: https://blog.csdn.net/yangwohenmai1/article/details/90404497 当线程能流畅安全的自动运行后,我们就要考虑一些更风骚的操作,就是如 ...

  7. WPF 中的 button style 的修改

    <Style x:Key="ButtonStyleTransBack" TargetType="Button"> <Setter Proper ...

  8. windows下删除文件夹里的 .svn

    windows下: 删除文件夹里的 .svn, cmd  进入相应目录  运行    for /r ./ %a in (./) do @if exist "%a/.svn" rd ...

  9. 线程间协作的两种方式:wait、notify、notifyAll和Condition

    转载自海子: 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者 ...

  10. 项目中经常用到的sass语法汇总

    1.定义变量 使用:$(符号定义变量) 注意:使用时要带有'$'符号,定义变量的方式与PHP相同 $变量:数值; $color_r : red; div{ color:$color_r; } 2.if ...