JMeter中的JavaScript加密实战
JMeter中的JavaScript加密实战
在性能测试领域,Apache JMeter 作为一款强大的开源工具,广泛应用于模拟多用户并发请求以评估应用程序的性能。然而,在实际的测试场景中,直接传输明文敏感信息(如用户密码、API密钥等)可能会带来安全风险。因此,在JMeter中集成加密功能,尤其是利用JavaScript进行数据加密,成为了一种提升测试安全性和真实性的有效手段。本文将通过实战案例,详细介绍如何在JMeter中利用JavaScript实现数据加密。
一、引言
JMeter 提供了丰富的扩展性,通过内置的JSR223 Sampler和PostProcessor等组件,用户可以轻松集成JavaScript代码进行脚本编写。虽然JMeter内置的JavaScript引擎(如Mozilla Rhino)在性能上可能不如现代JavaScript引擎,但它足以满足大多数性能测试脚本编写的需求,包括数据加密。
二、准备工作
在实战之前,首先需要确定加密方式。由于JavaScript本身不直接支持复杂的加密算法(如RSA、AES等),我们需要寻找适用于Rhino引擎的轻量级JavaScript加密库。
三、实战步骤
1. 将加密库放到JMeter的bin目录下

2. 新建一个 JSSR233 PreProcessor,选择 JavaScript 语言

3. 编写 JavaScript 代码,进行加密操作,并设置变量返回
// 对象覆盖
var navigator = this;
var window = this;
// 加载js文件
load("crypto-js.min.js");
load("jsencrypt.min.js");
// 公钥
var public_key = '-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDII4nWFbcBSfu/VDurEQjL165m\nqMzroujtv8C1JDmCRxqSMUSe3Omv0yw4Z0VbnejBBYSftV4Ftv81WeNSt9jabRO9\ncHpvAAGeZyssFQ1wieoGg7GRoPlHWU611Oi4VkmRnv37GyCwvR/yo2FO4WoWOfFU\ncjwsVFwhDvWHtLpJ4QIDAQAB\n-----END PUBLIC KEY-----'
//随机key
function getKey() {
var random_str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
var str_str = ""
for (var i = 0; i < 16; i++) {
// 生成一个从0到字符串长度(不包括长度本身)的随机数
var randomIndex = Math.floor(Math.random() * random_str.length)
// 使用随机索引从字符串中抽取一个字符
str_str += random_str.charAt(randomIndex)
}
return str_str
}
// RSA加密
function rsaUtil(txt) {
var encryptor = new JSEncrypt();
encryptor.setPublicKey(public_key);
return encryptor.encrypt(txt);
}
// AES加密
function aesUtil(aesKey, text) {
// 假设您有一个密钥(key)和一个要加密的文本(text)
var key = CryptoJS.enc.Utf8.parse(aesKey); // 密钥需要是16(AES-128)、24(AES-192)或32(AES-256)字节长
// 使用CryptoJS的AES加密函数
var encrypted = CryptoJS.AES.encrypt(text, key, {
mode: CryptoJS.mode.ECB, // 常见的模式有ECB、CBC、CFB、OFB等,但请注意ECB模式不推荐用于安全敏感的应用
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
}
// 拼接proDate
function proData(user_name, passwprd) {
return '{"account":"' + user_name + '","password":"' + passwprd + '","verify_code":"","verify_img_base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANwAAAAyCAAAAAASf+qvAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAARUlEQVR42u3PAQEAAAgCIP/PdYE/Ch6QHhY5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ub+5AfLkoMlhsnqUAAAAAElFTkSuQmCC","verify_code_time":"","verify_code_hash":""}'
}
var aesKey = getKey()
// 加密的data
var encryptedData = aesUtil(aesKey, proData(1, 2))
// 加密的key
var encryptedKey = rsaUtil(aesKey)
//设置变量
vars.put("encrypt_data", encryptedData);
vars.put("encrypt_key", encryptedKey);
4. 使用JMeter其他组件引用加密的变量

5. 运行结果

JMeter中的JavaScript加密实战的更多相关文章
- jmeter中实现java请求实战日志
view code public class JdbcInsert implements JavaSamplerClient { // 全局变量 PreparedStatement pstmt; Co ...
- Jmeter中实现base64加密
Jmeter已不再提供内置base64加密函数,遇到base64加密需求,需要通过beanshell实现 直接上beanshell代码: import org.apache.commons.net.u ...
- 使用kettle转换中的JavaScript对密码进行加密和解密
日常开发中,为了确保账号和密码的安全,时常要对密码进行加密和解密.然而kettle是怎么对密码进行加密和解密的呢? 下面的代码需要再转换中的JavaScript中运行. var encrypted_p ...
- JavaScript中的数据结构及实战系列
本系列主要是讲解JavaScript中的数据结构及在实际项目中遇到的地方 JavaScript中的数据结构及实战系列(1):队列 JavaScript中的数据结构及实战系列(2):栈
- Jmeter 请求参数中包含 MD5 加密的密码
如何在jmeter中对参数进行加密 使用工具:java+myeclipse 让开发将他的加密类从eclipse中导出来打成jar包,放在jmeter安装文件夹lib文件夹中%JMETER HOME%\ ...
- 如何在jmeter中调用自己写的java工具包
本文介绍在jmeter中调用自己写java工具包,并非直接继承jmeter提供的java sample request接口. 工具/原料 jmeter eclipse 方法/步骤 通常用jmeter做 ...
- JavaScript加密解密7种方法总结分析
原文地址:http://wenku.baidu.com/view/9048edee9e31433239689357.html 本文一共介绍了七种javascript加密方法: 在做网页时(其实是网页木 ...
- 芝麻HTTP:JavaScript加密逻辑分析与Python模拟执行实现数据爬取
本节来说明一下 JavaScript 加密逻辑分析并利用 Python 模拟执行 JavaScript 实现数据爬取的过程.在这里以中国空气质量在线监测分析平台为例来进行分析,主要分析其加密逻辑及破解 ...
- Jmeter中主要管理器功用
不管是在使用jmeter进行性能测试还是接口自动化测试时经常用到各种管理器进行对参数的处理,但是有时候分不清几种管理器的具体用法,所以做个笔记,列一下吧(所列内容基于版本为3.2) 主要内容包含以下: ...
- javascript加密PHP解密---jsencrypt
今天偶然发现jsencrypt这玩意,之前做"直播室聊天"时 数据传输明文问题没解决; 一直苦苦寻找技术解决方案今天勉强找了个: 原理:javascript加密PHP解密: 完全依 ...
随机推荐
- axios获取上传进度报错xhr.upload.addEventListener is not a function
错误问题 Vue:xhr.upload.addEventListener is not a function 这个问题是因为mockjs改动了axios里面XMLHttpRequest对象致使的 根据 ...
- CudaSPONGE之Python接口
技术背景 在上一篇博客中我们介绍了CudaSPONGE的基本安装和使用方法.为了性能考虑,CudaSPONGE是基于纯CUDA C开发的,但是现在很多轮子都是Python开发的.为兼容更多的框架和平台 ...
- TesseractOCR-GUI:基于WPF/C#构建TesseractOCR简单易用的用户界面
前言 前篇文章使用Tesseract进行图片文字识别介绍了如何安装TesseractOCR与TesseractOCR的命令行使用.但在日常使用过程中,命令行使用还是不太方便的,因此今天介绍一下如何使用 ...
- WinForm(C/S)项目中使用矢量字体(FontAwsome、Elegant)图标
1.介绍 字体图标在Web应用中最为常见,字体图标是矢量的,矢量图意味着每个图标都能在所有大小的屏幕上完美呈现,可以随时更改大小和颜色,而且不失真.字体图标常见的有Font Awesome和Elega ...
- NoSQL 述评
作为主库的 nosql 只有 CockroachDB.TiKV 以及 MongoDB(从4.0后事务似乎可用了),CockrouchDB 已经收费,另外 YugabyteDB 也可选,但大家的反馈都不 ...
- C#字符串拼接的几种方式及其性能分析对比
前言 在C#编程中字符串拼接是一种常见且基础的操作,广泛应用于各种场景,如动态生成SQL查询.构建日志信息.格式化用户显示内容等.然而,不同的字符串拼接方式在性能和内存使用上可能存在显著差异.今天咱们 ...
- 【Mybatis】学习笔记02:实现简单的查
Mybatis02:简单的查 如果你没先去学 增删改 ,然后直接看这篇记录,我想会有些困难.因为该文写的很粗劣,只是简单的截图.所以没基础的建议先去看 [Mybatis]学习笔记01:连接数据库,实现 ...
- tailscale安装教程
tailscale安装失败可能是由于以下原因之一导致的: 系统兼容性问题:tailscale可能不支持你的操作系统版本或架构.请确保你的系统满足官方的最低要求,并尝试使用官方提供的正确版本进行安装. ...
- Windows 10 下编译 64 位 OpenJDK 8 并单步调试
Windows 10 下编译 64 位 OpenJDK 8 软件版本 操作系统:Windows 10 Cygwin:3.5.4-1 Visual Studio:2010 英文版 freetype: 2 ...
- Qt音视频开发06-海康sdk内核linux客户端
一.前言 海康sdk的示例在官方是提供了的,但是无论UI还是交互简直是宇宙无敌的垃圾,猜测应该是初学者编写的,估计练手用的,所以老早就想把这个linux支持集成到自己的示例中,既然已经支持了windo ...