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解密: 完全依 ...
随机推荐
- javascript数组合并效率对比
1.数组元素量级大而合并次数少时,性能对比: concat() > push() > [-array1,-array2] 2.数组元素少但合并次数多时,性能对比: push() > ...
- PySAGES实记
技术背景 PySAGES是一款可以使用GPU加速的增强采样插件,它可以直接对接到OpenMM上进行增强采样分子动力学模拟,这里我们测试一下相关的安装,并尝试跑一个简单的增强采样示例. 安装PySAGE ...
- Clickhouse之数据删除方式
什么是TTL? TTL的意思是Time To Live表示数据的存活时间.由于数据的价值会根据保存的时间成反比,出于存储成本的考虑通常只会保留近一年的数据.而在MergeTree (合并树)引擎中,可 ...
- Yii2之model
记录model常用方法 between: $model->andFilterWhere(['between','apply_time',$startTime,$endTime])
- Nuxt.js 应用中的 beforeResponse 事件钩子
title: Nuxt.js 应用中的 beforeResponse 事件钩子 date: 2024/12/5 updated: 2024/12/5 author: cmdragon excerpt: ...
- 为什么你用的 MyBatis 慢?一行配置让它性能翻倍!
为什么你用的 MyBatis 慢?一行配置让它性能翻倍! 在 Java 后端开发的江湖里,MyBatis 堪称一员大将,凭借着灵活的 SQL 编写.方便的数据库对接能力,深受广大开发者的喜爱.但不少小 ...
- openEuler欧拉部署gitbook
安装nodejs10 参见<openEuler欧拉安装指定版本的nodejs> 安装Gitbook n 16 # 选择高版本的node npm config set registry ht ...
- 中电金信智能视觉分析系统,以AI技术助力企业升级
基于行业需求与业务痛点,中电金信推出了智能视觉分析系统.该系统是集视频接入.视频识别与分析.AI算法管理.异常报警等为一体,可提供视频安全监管标准的场景应用方案以及二次开发能力的通用智能视觉分析系 ...
- ASP.NET Core EventStream (SSE) 使用以及 WebSocket 比较
在开发环境中,对于实时数据流的需求非常常见,最常用的技术包括 Server-Sent Events (SSE) 和 WebSocket. 什么是 Server-Sent Events (SSE)? S ...
- 渗透测试-前端加密分析之RSA+AES
本文是高级前端加解密与验签实战的第8篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过RSA与AES加密来爆破登录. 由于RSA加解密有长度限制,以及解密速度等问题, ...