最近刚好在弄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. 线程 Thread类 GIL锁 信号量 Event事件

    线程的开启方法 进程是操作系统调度的最小单位,一个进程最少有一个主线程,而一个进程中可以开启多个线程 from threading import Thread def task(): print('A ...

  2. Mysql 主从同步原理简析

    在开始讲述原理的情况下,我们先来做个知识汇总,究竟什么是主从,为什么要搞主从,可以怎么实现主从,mysql主从同步的原理1.什么是主从其实主从这个概念非常简单主机就是我们平常主要用来读写的服务,我们称 ...

  3. @ImportResource-SpringBoot使用xml配置Bean

    前言 SpringBoot推荐使用注解的方式去声明bean,但还是提供了xml的方式去加载bean 一.创建要声明为bean的实体类 WzqEntity.java package com; /** * ...

  4. 【权限管理】springboot集成security

    摘自: https://www.cnblogs.com/hhhshct/p/9726378.html https://blog.csdn.net/weixin_42849689/article/det ...

  5. new[]/delete[]与new/delete区别

    new[]/delete[]与new/delete完全不同-动态对象数组创建通过new[] 完成-动态对象数组的销毁通过delete[]完成-new[]/delete[]能够被重载,进而改变内存管理方 ...

  6. Linux下的Shell工作原理

    Linux下的Shell工作原理 Linux系统提供给用户的最重要的系统程序是Shell命令语言解释程序.它不属于内核部分,而是在核心之外,以用户态方式运行.其基本功能是解释并执行用户打入的各种命令, ...

  7. 【C语言】第2章 算法 — 程序的灵魂

    第2章 算法 - 程序的灵魂 一个程序主要包括以下两方面的信息: 对数据的描述.在程序中要指定用到哪些数据以及这些数据的类型和数据的组织形式 也就是数据结构(data structure) 对操作的描 ...

  8. Mybatis-技术专区-如何清晰的解决出现「多对一模型」和「一对多模型」的问题

    前提介绍 在mybatis如何进行多对一.一对多(一对一)的多表查询呢?本章带你认识如何非常顺滑的解决! 基础使用篇 一对一 association association通常用来映射一对一的关系,例 ...

  9. golang web源码解析

    Go的web工作原理 在Go中使用及其简单的代码即可开启一个web服务.如下: //开启web服务 func test(){ http.HandleFunc("/", sayHel ...

  10. WebService学习总结(六)--CXF 与Spring结合+tomcat发布

    该项目在上文   WebService学习总结(四)--基于CXF的服务端开发  的基础上修改为spring上发布的webservice接口 1.新建web project 工程 2.导入spring ...