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加密实战的更多相关文章

  1. jmeter中实现java请求实战日志

    view code public class JdbcInsert implements JavaSamplerClient { // 全局变量 PreparedStatement pstmt; Co ...

  2. Jmeter中实现base64加密

    Jmeter已不再提供内置base64加密函数,遇到base64加密需求,需要通过beanshell实现 直接上beanshell代码: import org.apache.commons.net.u ...

  3. 使用kettle转换中的JavaScript对密码进行加密和解密

    日常开发中,为了确保账号和密码的安全,时常要对密码进行加密和解密.然而kettle是怎么对密码进行加密和解密的呢? 下面的代码需要再转换中的JavaScript中运行. var encrypted_p ...

  4. JavaScript中的数据结构及实战系列

    本系列主要是讲解JavaScript中的数据结构及在实际项目中遇到的地方 JavaScript中的数据结构及实战系列(1):队列 JavaScript中的数据结构及实战系列(2):栈

  5. Jmeter 请求参数中包含 MD5 加密的密码

    如何在jmeter中对参数进行加密 使用工具:java+myeclipse 让开发将他的加密类从eclipse中导出来打成jar包,放在jmeter安装文件夹lib文件夹中%JMETER HOME%\ ...

  6. 如何在jmeter中调用自己写的java工具包

    本文介绍在jmeter中调用自己写java工具包,并非直接继承jmeter提供的java sample request接口. 工具/原料 jmeter eclipse 方法/步骤 通常用jmeter做 ...

  7. JavaScript加密解密7种方法总结分析

    原文地址:http://wenku.baidu.com/view/9048edee9e31433239689357.html 本文一共介绍了七种javascript加密方法: 在做网页时(其实是网页木 ...

  8. 芝麻HTTP:JavaScript加密逻辑分析与Python模拟执行实现数据爬取

    本节来说明一下 JavaScript 加密逻辑分析并利用 Python 模拟执行 JavaScript 实现数据爬取的过程.在这里以中国空气质量在线监测分析平台为例来进行分析,主要分析其加密逻辑及破解 ...

  9. Jmeter中主要管理器功用

    不管是在使用jmeter进行性能测试还是接口自动化测试时经常用到各种管理器进行对参数的处理,但是有时候分不清几种管理器的具体用法,所以做个笔记,列一下吧(所列内容基于版本为3.2) 主要内容包含以下: ...

  10. javascript加密PHP解密---jsencrypt

    今天偶然发现jsencrypt这玩意,之前做"直播室聊天"时 数据传输明文问题没解决; 一直苦苦寻找技术解决方案今天勉强找了个: 原理:javascript加密PHP解密: 完全依 ...

随机推荐

  1. supervisord如何优雅的新加服务

    前言 现有supervisord 的管理下已经有服务正在运行,如果想要不重启正常运行的服务,还新添加应用如何实现呢? [建议查看官方文档中的各个action介绍,以免踩坑] http://superv ...

  2. after_request 可以直接用于接口日志

  3. Tomcat并发数优化的方法总结

    web应用的并发提升,除了负载均衡.在小企业中也可以通过一些软件的上的设置来进行一些优化.下面是一些在服务器上修改tomcat参数的优化方法,非常简单实用!(这些方法通过网络整理的) 1,让Tomca ...

  4. elasticsearch-head插件基本使用

    1. 查看搜索setting信息 mp_index/_settings 2. 设置分片数量 3, 修改数据刷新间隔 { "refresh_interval": "30s& ...

  5. 设计模式【3.3】-- CGLIB动态代理源码解读

    cglib 动态代理 cglib介绍 CGLIB 是一个开源项目,一个强大高性能高质量的代码生成库,可以在运行期拓展 Java 类,实现 Java 接口等等.底层是使用一个小而快的字节码处理框架 AS ...

  6. 使用 yum 安装 nginx

    rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm ...

  7. SEEDLab —— 环境变量与 Set-UID 实验

    [软件安全]实验1--环境变量与 Set-UID 实验 Task 1:配置环境变量 使用printenv或env指令来打印环境变量: ​ 如果只想打印特定的环境变量,如PWD变量,可以使用printe ...

  8. django推导流程

    目录 一.纯手撸web框架 二.基于wsgiref模块 三.代码封装优化 四.动静态网页 五.jinja2模块 六.前端.后端.数据库三者联动 一.纯手撸web框架 1.web框架的本质 理解1:连接 ...

  9. 谈谈区块链(18):以太坊的UTXO

    https://www.8btc.com/article/117510 本来并没有计划写这篇文章,只是这两天微信里有一篇文章传播的比较厉害,叫:<其实并没有什么比特币,只有UTXO>.其中 ...

  10. Qt数据库应用18-横向纵向排版

    一.前言 近期用户提了个需求,需要打印一个文档,要求其中部分页横向排版部分页面纵向排版,这个在之前的通用打印导出pdf类中是不具备的,通用的打印导出pdf只能统一设置一个排版方式,要么横向要么纵向,而 ...