Jmeter使用beanshell对接口加密,调用AES代码的jar包,CBC模式,有偏移量。

news2025/1/23 6:21:08

目录

前言:

这是AES加密代码

beanshell中的脚本


前言:

对接口进行加密是保障数据安全的重要措施之一。在JMeter中,你可以使用BeanShell脚本来实现对接口数据的加密处理。

工作中需要对接口进行AES加密,找开发要来了加密的代码(如下),记录下具体的使用方法:

  1. 在IDEA中新建一个AES1模块,在里面新建一个类(类的名字为AESu1)。

  2. 把下面的代码复制进去,

  3. 这样,AES加密的方法就构建好了。接下来就是导出为jar包了。文件-项目结构-工件-点击+号,


    3.1 点击构建-构建工件

    3.2 再选中AES1.jar,点击构建,jar就创建好了

  4. 把生成的jar包,放到jmeter的lib路径下(有的文章说需要放到lib的ext路径下),不过我是放到lib就已经可以使用了。

  5. 在jmeter中,需要把jar包的路径,放到测试计划中。

  6. 在beanshell中import AES1.*;填入代码即可

这是AES加密代码

package AES1;  
  
import sun.misc.BASE64Encoder;  
import javax.crypto.Cipher;  
import javax.crypto.spec.IvParameterSpec;  
import javax.crypto.spec.SecretKeySpec;  
import java.io.UnsupportedEncodingException;  
import java.nio.charset.StandardCharsets;  
import java.security.AlgorithmParameters;  
import java.security.Key;  
public class AESu1{  
  
    private static final String ALGORITHM = "AES/CBC/PKCS5PADDING";//加密模式,设置为CBC  
    private static final String IV_SPEC = "ZE*84J]YE@11a=?9";//偏移量,可自行更改。  
    public static String encrypt(String content, String token) throws UnsupportedEncodingException {  
        //对content加密,token为加密的秘钥,长度要为16位  
        byte[] result = encryptByte(content.getBytes(StandardCharsets.UTF_8), token.substring(0, 16).getBytes(StandardCharsets.UTF_8));  
        //return Base64.encodeBase64URLSafeString(result);  
        return new BASE64Encoder().encode(result);  
  
    }  
  
    static byte[] encryptByte(byte[] content, byte[] token) {  
        if (content == null || token == null) {  
            return null;  
        }  
        try {  
            Cipher cipher = initCipher(Cipher.ENCRYPT_MODE, token);  
            return cipher.doFinal(content);  
        } catch (Exception e) {  
            // log.error("AES encrypt failed", e);  
        }  
        return null;  
    }  
  
    private static Cipher initCipher(int mode, byte[] token) throws Exception {  
        if (token == null) {  
            return null;  
        }  
        Cipher cipher = Cipher.getInstance(ALGORITHM);  
        Key key = new SecretKeySpec(token, "AES");  
        AlgorithmParameters params = AlgorithmParameters.getInstance("AES");  
        params.init(new IvParameterSpec(IV_SPEC.getBytes(StandardCharsets.UTF_8)));  
        cipher.init(mode, key, params);  
        return cipher;  
    }  
  
    public static void main(String[] args) throws UnsupportedEncodingException {  
        String a2 = "1234";  
        String pswEncrypt = AESu1.encrypt(a2,"10b457959d4a7a30");  
        System.out.println(pswEncrypt);  
  
    }  
}


beanshell中的脚本

import AES1.*;//导入AES1包
 
String a1 = AESu1.encrypt("1234","10b457959d4a7a31");	//1234是需要加密的字符,10b457959d4a7a31是加密的秘钥,长度需要为16位	
vars.put("a1",a1);//把a1的内容,赋值给jmeter的变量a1

log.info("a1是"+a1);//打印,显示为加密后的内容

ps:当需要加密的字符有双引号时,如果直接定义String r ="{"state":"FAILURE","code":"A000204","result":"验证码不正确"}",
,可能jmeter会报错

可以通过prev函数,把返回体中需要的部分,直接传给String,举例如下:

String r = prev.getResponseDataAsString();
String params= AESu1.encrypt(r,"10b457959d4a7a30")

 作为一位过来人也是希望大家少走一些弯路,希望能对你带来帮助。(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等),相信能使你更好的进步!

 留【自动化测试】即可【自动化测试交流】:574737577(备注ccc)icon-default.png?t=N5K3http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=ZzkQcmAe85ckaBPtQUptkVckU2U5XpZL&authKey=xMGxie22qtDJbjrdboxCpO7ZJxkuPAviYs6GiRb2B5T9YhJjlUGuFZSfoxQfWlyy&noverify=0&group_code=574737577

 

 

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

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

相关文章

PADS Logic的格点推荐设置

使用合适的格点大小能有效的提高我们设计的效率以及所设计文件的美观性。 第一步:执行菜单命令工具-选项,如图1所示 图1 设置选项示意图 第二步:在弹出的选项窗口常规栏中可以找到栅格设置,如图2所示,在设计中通常设置…

真无线蓝牙耳机排行榜10强,十款真无线蓝牙耳机盘点

为了帮助大家在这个充满选择的世界中找到最理想的蓝牙耳机,我们特别为您精心挑选了几款备受赞誉的产品,它们在音质、舒适度、功能和性价比等方面都有出色的表现。在本文中,我们将深入探讨这些蓝牙耳机的特点和优势,帮助您更好地了…

es学习知识汇总

es的索引库就相当于mysql的表 es的文档就相当于mysql的一条数据(内容) 用代码创建索引库到es 新增文档(相当于mysql的一条数据(内容) 模拟将数据库中的到内容新增到es中 查询文档 注:以下 hotel为索引库名…

如何用迅捷PDF转换器在线压缩PDF文件

大家在工作中传输和保存PDF文件,有时发现PDF文件过大不利于保存,这种情况很多人都会对其进行压缩,但在压缩PDF大小的同时,大家也要注意PDF文件压缩后的质量,那么怎么才能又压缩大小,又能保持文件清晰度呢&a…

GitLab安装及代码管理

一、安装 环境:centos7 1.1、下载rpm安装脚本命令 curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash 上边命令里的rpm安装脚本地址可能会随时更新,当前需要用的是哪个地址,可以参考…

Java基础-泛型类、泛型方法、泛型接口

泛型的简单使用 集合中存储数据,使用到的泛型 // 如果我们没有给集合指定类型,默认认为所有的数据类型都是Object类型 // 此时可以往集合添加任意的数据类型。 // 带来一个坏处:我们在获取数据的时候,无法使用他的特有行为。 // 此时推出了泛…

新生产力革命下,亚马逊云科技超600种不同计算实例满足算力要求

近日,一年一度的亚马逊云科技中国峰会在上海如期召开。在本次峰会上可以切实地感受到亚马逊云科技的Day one理念,并且也对AI创新做了详细解读。 “AI创新”使算力需求井喷、运维复杂性增加 随着AI大模型的发展,大模型应用规模呈爆发式增长…

LED显示屏结构

LED显示屏通常由以下几个主要组成部分构成: LED模块:LED模块是构成LED显示屏的基本单元。它包含多个LED点阵,每个点阵包含红色、绿色和蓝色LED灯珠,通过不同的亮度和颜色组合来呈现图像和视频。LED模块的尺寸和像素密度可以根据需…

短视频seo矩阵+抖音小程序源码开发解决方案(一)

该解决方案主要针对产品用户交易决策周期长/非标定制等情况的企业,如:房产、汽车、金融、咨询服务,广告设计、网络科技公司,TOB类销售行业等。 基于不同的经营场景,解决方案全面更新,新增账号管理&#xf…

Rust in Action笔记 第九章 时间管理

本章主要讲如何实现一个网络时间协议NTP(Network Time Protocol)客户端,谷歌的世界时间同步误差大概在7毫秒,开源网站CockroachDB的延迟在数十毫秒,使用了NTP协议,在处理与时间敏感的数据时,chr…

C++实现位图与布隆过滤器

文章目录 前言1.位图相关介绍2.位图的实现3.位图的简单总结4.布隆过滤器的相关介绍5.布隆过滤器的实现6.布隆过滤器总结1.布隆过滤器的特点2.布隆过滤器的优点3.布隆过滤器的缺点 7.位图的应用海量数据面试题 前言 之前介绍了哈希表,本文要介绍另一种基于哈希思想的…

Java爬虫与Python爬虫有什么区别

Java爬虫和Python爬虫是两种常见的网络爬虫实现方式,它们在语言特性、开发环境和生态系统等方面存在一些区别。 1. 语言特性:Java是一种面向对象的编程语言,而Python是一种脚本语言。Java较为严谨,需要明确定义类、方法和变量&…

快速生成数据库表说明文档

背景 项目过程中需要对数据库字段说明归纳总结成文档,每个字段都用驼峰命名的话会比较低效繁琐。 现在分享一个在工作中使用的工具,可以一键生成数据库说明文档,简单的改改即可。 支持的数据库类型 MySql Oracle SqlServer PostgreSql Ma…

【vue3】15-Vue全家桶-Pinia-更优雅的管理vue状态

Pinia状态管理 Pinia和Vuex的对比Pinia详解Pinia基本使用创建pinia创建Store 核心概念statestate基本使用sate其他操作 核心概念gettersgetters基本使用getters其他操作 核心概念actionsactions基本使用actions异步操作 Pinia和Vuex的对比 什么是Pinia呢? Pinia&a…

使用OPC UA客户端工具Softing OPC Client读写OPC节点数据

Softing OPC Client工具介绍 Softing OPC Client工具是德国Softing公司出品的标准OPC客户端。是最完备的OPC UA客户端工具。全部的数据类型都支持,功能齐备。是查看或测试OPC服务器的最好工具了。功能齐全、使用方便、而且免费 官方下载地址: https://industrial.softing.co…

AI视频融合平台EasyCVR添加上级平台提示语出现错位现象的排查与优化

EasyCVR视频融合平台基于云边端一体化架构,具有强大的数据接入、处理及分发能力,平台支持多协议、多类型的设备接入,包括主流标准协议国标GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大…

web自动化测试——pytest快速上手

目录 1. pytest 1.1 安装 1.2 验证安装 1.3 pytest文档 1.4 创建测试用例 1.5 执行测试用例 1.5.1 使用命令行执行 1.5.2 IDE(PyChram)执行 1.5.3 执行指定文件指定方法 1.5.3.1 命令行编写方式 1.5.3.2 pycharm 编写方式 1.5.4 带参数执行 …

spring Cloud使用Skywalking搭建笔记

skywalking支持dubbo,SpringCloud,SpringBoot集成,代码无侵入,通信方式采用GRPC,性能较好,实现方式是java探针,支持告警,支持JVM监控,支持全局调用统计等等,功…

品牌方的brief怎么写,注意事项

我们都知道,对于产品传播来说,达人起着重要的作用。可又是什么影响着达人的传播结果呢?今天给大家分享下,品牌方的brief怎么写的注意事项。 一、什么是brief 可能有的朋友,还不太清楚,到底什么是brief。Brief&#xf…

【openGauss数据库】---设置开机自启动openGauss数据库服务

【openGauss数据库】---设置开机自启动openGauss数据库服务 🔻 一、openGauss 自定义服务的配置文件了解🔻 二、设置openGauss 开机自启动🔻 三、总结—温故知新 👈【上一篇】 💖The Begin💖 点点关注&am…