JMETER也会遇到加密难题,中文乱码也能一并处理

news2025/7/9 8:44:17

文章目录

      • 加密的接口测试
      • 导出jar包,放入jmeter的lib/ext扩展目录
      • JMeter输出中文乱码
      • 总结

加密的接口测试

不管是接口测试还是性能测试,在遇到接口有加密入参的时候,该怎么办?

  • 毫无疑问,放弃自己实现的想法,除非自己很懂,别装了,还是先问问开发算法名称是啥吧!

于是从开发手中拿到了加密代码,从代码结构上看是没问题,开发也是调用别人写好的算法,只不过加入了自己的密钥和选择不同的加密方式而已。但是开发齐刷刷的丢了三个java文件过来,笔者瞬间惊呆了,因为只要一个加密方法的java文件即可,于是笔者终于选出了正确的代码。

import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.encoders.Base64;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import java.security.Security;
import java.util.Arrays;

public class AESUtil {

    // 算法名称
    final static String KEY_ALGORITHM = "AES";
    // 加解密算法/模式/填充方式
    final static String ALGORITHM_PKCS7 = "AES/CBC/PKCS7Padding";
    final static String ALGORITHM_ZERO = "AES/CBC/ZEROBYTEPADDING";
    private Key key;
    private Cipher cipher;

    byte[] iv = {0x30, 0x31, 0x30, 0x32, 0x30, 0x33, 0x30, 0x34, 0x30, 0x35, 0x30, 0x36, 0x30, 0x37, 0x30, 0x38};

    private void init(byte[] keyBytes, String algorithmStr) {
        // 如果密钥不足16位,那么就补足.  这个if 中的内容很重要
        int base = 16;
        if (keyBytes.length % base != 0) {
            int groups = keyBytes.length / base + (keyBytes.length % base != 0 ? 1 : 0);
            byte[] temp = new byte[groups * base];
            Arrays.fill(temp, (byte) 0);
            System.arraycopy(keyBytes, 0, temp, 0, keyBytes.length);
            keyBytes = temp;
        }
        // 初始化
        Security.addProvider(new BouncyCastleProvider());
        // 转化成JAVA的密钥格式
        key = new SecretKeySpec(keyBytes, KEY_ALGORITHM);
        try {
            // 初始化cipher
            cipher = Cipher.getInstance(algorithmStr, "BC");
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 加密方法
     *
     * @param content 要加密的字符串
     * @param pwd     加密密钥
     * @return Base64
     */
    public byte[] encrypt(String content, String pwd) {
        init(pwd.getBytes(), ALGORITHM_PKCS7);
        try {
            cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(iv));
            byte[] encryptedText = cipher.doFinal(content.getBytes());
            return Base64.encode(encryptedText);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}
  • 上面的代码片段,用了一个工具包bouncycastle,记得在maven项目中pom添加依赖哦
    <dependency>
      <groupId>org.bouncycastle</groupId>
      <artifactId>bcprov-jdk16</artifactId>
      <version>1.46</version>
    </dependency>

导出jar包,放入jmeter的lib/ext扩展目录

以上代码当然是在java编辑工具里调试的,但是它要在jmeter何处使用呢?

  • JMeter登场,笔者习惯使用jmeter来完成性能测试任务;至于怎么导出可用的jar,可以百度问问他人,因为笔者导出的方式(当然也是别人的方式),最终得到了如下错误,就是,嗯,包没打齐活的意思。
2022-11-07 10:26:21,322 ERROR o.a.j.r.ClassFinder: Error filtering class org.bouncycastle.x509.extension.AuthorityKeyIdentifierStructure, it will be ignored
java.lang.SecurityException: Invalid signature file digest for Manifest main attributes

在这里插入图片描述

  • 那到这里笔者是放弃了吗?很显然,这不是笔者的风格,JMeter工具的beanshell元件即可导包也可编写java片段的代码
    在这里插入图片描述

前面说了,该加密方法用了一个工具包bouncycastle,记得也要把它的jar包放在lib/ext里,不然你的beanshell就调用不到了
在这里插入图片描述
温馨提示:beanshell脚本的好处,就是它没有最外层的类名,方法直接写,直接调用即可;还有它不用写自己的包路径,直接导你需要的包即可。要是不会就来找笔者吧!

JMeter输出中文乱码

这是个很常见的问题,基本很多时候都能莫名其妙的遇到,当然笔者也提供了几种方式可供调试
在这里插入图片描述

  • 修改jmeter.properties文件的sampleresult.default.encoding字符集,默认是ISO-8859-1,改成utf-8
  • 或者在sampler请求之前增加beanshell元件,代码:prev.setDataEncoding(“utf-8”);
  • 又或者在sampler的content encoding输入:utf-8
    在这里插入图片描述

解决,调试一下,结果输出如下,完美!
在这里插入图片描述

总结

这里也会遇到粉丝常问的一个问题,beanshell怎么用?外部jar怎么在jmeter中使用?这简直很要命,因为在问之前,自己没有深入思考,至少没有看过jmeter官方操作手册,总是在我行我素、一意孤行,让自己陷入无法解决问题的深渊;正如笔者记录的一样,既然jar导出在jmeter用不起来,那么就把代码在beanshell应用起来,总有一款方法适合你;所以共勉!

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

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

相关文章

YOLOv4 NCNN 量化模型和实时推理

又搬来了大佬的啊 膜拜大佬 2021年5月7日&#xff0c;腾讯优图实验室正式推出了ncnn新版本&#xff0c;这一版本的贡献毫无疑问&#xff0c;又是对arm系列的端侧推理一大推动&#xff0c;先剖出nihui大佬博客上关于新版ncnn的优化点&#xff1a;继续保持优秀的接口稳定性和兼…

代码随想录——字符串篇

1、反转字符串 344.反转字符串 力扣题目链接 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数…

必知必会的Java多线程可算是被讲透彻了,让我们一起深入浅出多线程!

Java 提供了多线程编程的内置支持&#xff0c;让我们可以轻松开发多线程应用。 Java 中我们最为熟悉的线程就是 main 线程——主线程。 一个进程可以并发多个线程&#xff0c;每条线程并行执行不同的任务。线程是进程的基本单位&#xff0c;是一个单一顺序的控制流&#xff0c;…

计算机网络——HTTPS协议

目录 1、HTTPS是什么&#xff1f; 2、“加密”是什么&#xff1f; 3、HTTPS的加密机制 3.1、对称加密 3.2、非对称加密 3.3、“中间人问题” 1、HTTPS是什么&#xff1f; HTTPS是一个应用层协议&#xff0c;是在HTTP协议的基础上引入了一个加密层&#xff0c;进一步来保证…

23-职位分类展示平台响应式网页模板{HTML JS CSS)

扫码或搜索添加文末公众号「搞前端的半夏」&#xff1a;&#x1f357; 回复 ”网站模板“&#xff0c;免费送网站模板&#xff01; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 私信&#x1f4c4; 你还在未HTML网页设计作业头大吗&#xff1f; 你还在为自学前端&#xf…

【Vant Weapp】van-uploader 文件上传

目录 图片上传 图片回填 修改样式 循环多个上传图片 自定义上传的控件 图片上传 未上传样式&#xff1a; 上传限制6张后 &#xff1a; <van-uploader max-count"6" file-list"{{ fileList }}" bind:after-read"afterRead" bind:delete&…

【易忽视】方程两边同时平方会改变方程的解吗?【简洁证明】

问题提出 在做一道题的时候有这样一步&#xff1a;两边平方&#xff0c;最后求解&#xff0c;题很简单&#xff0c;但是这个方法是否能这么用引起了我的好奇。 思考 首先不妨假设一个通用的方程&#xff1a; f(x)g(x)f(x)g(x)f(x)g(x) 然后我们对方程两边平方&#xff1a; …

深度学习基础与线性回归实例

1、机器学习基础-线性回归 介绍&#xff1a;这是一个教育对收入影响的数据&#xff0c;从图像的走势来看&#xff0c;它是具有一个线性关系&#xff0c;即受教育年限越长收入越高&#xff0c;这样我们可以通直线来抽象出它们的关系。 接下来&#xff0c;我们将会介绍一些方法&…

Java中线程的状态

Java中线程的状态操作系统中线程的状态Java中线程的状态线程状态枚举类操作系统中线程的状态 从操作系统层面来看&#xff0c;线程通常有以下五种状态&#xff0c;前三种是线程的基本状态。 【运行态】&#xff1a;进程正处在处理机上运行&#xff0c;在单处理机环境下&#…

【学习笔记39】获取DOM标签对象

获取DOM标签对象一、认识DOM二、获取非常规DOM(html head body)1、HTML2、head3、body三、获取常规DOM&#xff08;一&#xff09;按照类名、标签名和ID名获取标签1、类名(伪数组)2、标签名(伪数组)3、ID名(唯一性)&#xff08;二&#xff09;按照选择器获取标签1、querySelect…

《人月神话》(The Mythical Man-Month)1 看清问题的本质:如果我们想解决问题,就必须试图先去理解它...

第一章 焦油坑&#xff08;The Tar Pit&#xff09;史前史中&#xff0c;没有比巨兽在焦油坑中垂死挣扎的场面更令人震撼的了。上帝见证着恐龙、猛犸象、剑齿虎在焦油中挣扎。它们挣扎得越是猛烈&#xff0c;焦油纠缠得越紧&#xff0c;没有任何猛兽足够强壮或具有足够的技巧&a…

IDEA注释配置程序员信息(带完整截图步骤,超级详细)

1.配置类注释的程序员信息 效果图 配置截图 模板 &#xff08;可根据需要进行位置调整及个数删除&#xff09; /***BelongsProject: ${PROJECT_NAME}*BelongsPackage: ${PACKAGE_NAME}*ClassName ${NAME}*Author: XUXIAN*CreateTime: ${YEAR}-${MONTH}-${DAY} ${HOUR}:${MINU…

这可能是最权威、最全面的Go语言编码风格规范了!

每种编程语言除了固定的语法之外&#xff0c;都会有属于自己的地道的(idiomatic)写法。其实&#xff0c;自然语言也不例外&#xff0c;你想&#xff0c;你用心想想是不是这样。语言的设计者们希望开发人员都能编写统一风格的地道的代码&#xff0c;这样不仅代码可读性好&#x…

细分图中的可到达节点 : 常规最短路运用题

题目描述 Tag : 「最短路」、「单源最短路」、「Dijkstra」、「SPFA」 给你一个无向图&#xff08;原始图&#xff09;&#xff0c;图中有 n 个节点&#xff0c;编号从 0 到 n - 1 。你决定将图中的每条边 细分 为一条节点链&#xff0c;每条边之间的新节点数各不相同。 图用…

[前端框架]-VUE(上篇)

Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目整合。另一方面&#xff0…

链表经典算法题目

1.回文链表 编写一个函数&#xff0c;检查输入的链表是否是回文的。 示例 1&#xff1a; 输入&#xff1a; 1->2 输出&#xff1a; false 示例 2&#xff1a; 输入&#xff1a; 1->2->2->1 输出&#xff1a; true 笔试的写法 重点是快速code,不考虑空间复杂度…

蒙特卡洛法(Monte Carlo)电动汽车负荷预测matlab程序设计

电动汽车充电负荷的时间分布预测 规模化电动汽车充电负荷在未来某一天随时间特性的分布规律是研究电动汽车发展对配 电网影响以及充电站选址定容问题的前提与基础。电动汽车充电负荷的分布情况与车主的行 为特征有关&#xff0c;不同类型的电动汽车车主出行规律以及充电习惯不…

<Linux系统复习>信号

一、本章重点 1、什么是信号&#xff1f; 2、查看信号列表 3、信号捕捉 4、信号产生的5种方式 5、介绍CoreDump 6、信号处理的方式 7、如何理解信号产生到处理的过程 8、sigpending、sigprocmask、sigaction函数的使用 9、信号处理的时机 10、SIGCHLD信号 11、可重入函数 01 什…

Codeforces Round 836 (Div. 2) A - C

A:SSeeeeiinngg DDoouubbllee 题意&#xff1a;给定一个字符串&#xff0c;每个字符串的字符可以出现两次&#xff0c;要求通过重新排列构造一个回文串。 思路&#xff1a;直接暴力可以&#xff0c;每个字符头部一个尾部一个。 #include<cstdio> #include <iostream…

不使用实体类的情况下接收SQL查询结果、@Autowired注入为null解决

目录 一、场景 二、环境 三、使用 1、数据库表以及数据准备 2、项目导入必要依赖 3、添加连接数据库配置文件 4、编写测试方法 5、执行结果 四、将SQL单独提取出来 2.1 定义查询接口方法 2.2 测试 2.3 测试结果 五、问题记录&#xff1a; Autowired注入失败/null的…