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解密: 完全依 ...
随机推荐
- after_request 可以直接用于接口日志
- 4-CSRF漏洞渗透与防御
1.什么是CSRF漏洞 Cross-Site Request Forgery 跨站请求伪造 从一个第三方的网站,利用其他网站生效的cookie,直接请求服务器的某一个接口,导致攻击发生! 2.CSRF ...
- window下cmd显示乱码
前情 最近在维护一些老项目,本地开发环境跑不起来,需要根据cmd中的报错来解决一些环境问题 坑位 在解决环境错误的时候,cmd命令行日志打印出来的是一堆乱码,导致看不清具体是什么错误 Why? cmd ...
- vscode本地调试gitbook
1. windows下载安装git 2.安装nodejs 下载安装nvm https://github.com/coreybutler/nvm-windows/releases/download/1. ...
- GraphQL Part II: 中间件
GraphQL Part II: 中间件 如果您熟悉 ASP.NET Core 的中间件,您可能注意到在我们上一篇博客中我们已经拥有了一个中间件.在初始的空白应用中,中间件的职责是返回 hello W ...
- [Mybatis Plus]lambdaQueryWrapper和QueryWrapper的选择
结论 更推荐使用:LambdaQueryWrapper QueryWrapper:灵活但是不够类型安全 LambdaQueryWrapper:安全 分析 在MyBatis-Plus中,QueryWra ...
- tar/zip命令加密压缩
回到顶部 场景 Centos6下使用加密压缩,可以从A机器到B机器解压. 可用在kali上解压就不行. 回到顶部 命令 解包 tar zxvf FileName.tar 打包 tar czvf Fil ...
- Qt编写安防视频监控系统56-数据库分页
一.前言 在视频监控系统中也需要对日志记录进行查询显示,有时候查询到的记录并不能一页显示完,最好的做成翻页显示,如果所有记录都在一页显示通过滚动条查看,不是很符合用户习惯,比如搜索引擎的记录也都是分页 ...
- 推荐一个双语对照的 PDF 翻译工具的开源项目:PDFMathTranslate
今天给大家推荐一个双语对照的 PDF 翻译工具的开源项目:PDFMathTranslate . 项目介绍: 基于 AI 完整保留排版的 PDF 文档全文双语翻译,支持 Google/DeepL/Oll ...
- 20. C++快速入门--并发基础
参考:<Professional c++>,<并发编程实战> 1 基本概念 1.1 竞争 原子性 "原子"(atomic)操作是指一种不可分割的操作, 即在 ...