Jmeter引用js实现RSA加密

本文介绍了如何在JMeter中利用JSR223 PreProcessor结合Java 8 Nashorn 脚本引擎执行JavaScript进行RSA加密。通过获取RSA公钥参数,对登录密码进行加密,解决了在执行过程中遇到的`window`未定义和脚本不运行的问题,以及加密字符串顺序反向的问题。
Jmeter提供了JSR223 PreProcessor前置处理器,该工具融合了Java 8 Nashorn 脚本引擎,可以执行js脚本以便对脚本进行前置处理。其中比较典型的应用就是通过执行js脚本对前端数据进行rsa加密,如登录密码加密。

Jmeter提供了JSR223 PreProcessor前置处理器,通过该工具融合了Java 8 Nashorn 脚本引擎,可以执行js脚本以便对脚本进行前置处理。其中比较典型的应用就是通过执行js脚本对前端数据进行rsa加密,如登录密码加密。

rsa加密方式形如(用到了security.js这个脚本):
jQuery.ajax({
                type:"post",
                url:"loginset",
                success:function(rd){
                    if(rd!=null){
                        //加密模
                        var Modulus = rd.split(';')[0];
                        //公钥指数
                        var public_exponent = rd.split(';')[1];
                        //通过模和公钥参数获取公钥
                        var key = new RSAUtils.getKeyPair(private_exponent, "", Modulus);
                        //颠倒密码的顺序,要不然后解密后会发现密码顺序是反的
                        var reversedPwd =
<think>嗯,用户想知道如何在JMeter中模拟登录时实现和浏览器相同的密码加密传输。首先,我需要回忆一下JMeter的相关功能和加密处理的方法。记得JMeter可以通过前置处理器来执行加密操作,比如使用Beanshell或者JSR223脚本。不过用户提到浏览器中的加密,通常是前端用JavaScript进行的,比如RSA加密。所以,关键点应该是在JMeter中调用相同的JavaScript加密算法。 那用户提供的引用里有提到,在Java中直接使用加密类可能有问题,比如LoadRunner无法使用jar包,JMeter不支持import。但引用[2]提到用hex2b64和rsaKey.encrypt方法,这应该是前端JS的代码。所以正确的做法可能是将浏览器的加密JS文件导入JMeter,然后通过JSR223 Sampler来执行这些JS代码,对密码进行加密。 接下来,需要分步骤思考如何实现。首先,获取浏览器中使用加密JS文件,比如查看网页源代码,找到相关的加密函数,保存为rsa.js等文件。然后,在JMeter中通过HTTP请求获取动态参数,比如公钥或者盐值,这些可能需要从服务器响应中提取。之后,使用JSR223 Sampler加载并执行JS文件,调用相应的加密函数对密码进行处理。最后,将加密后的密码作为参数传递到登录请求中。 可能遇到的问题包括JS文件的依赖,比如某些加密库需要其他JS文件支持,或者JMeterJavaScript引擎兼容性问题。这时可能需要使用Rhino引擎或者切换到Groovy语言,后者性能更好。另外,动态参数的处理需要用到正则表达式提取器或JSON提取器,确保每次请求都能获取最新的参数值。 验证步骤也很重要,需要确认加密后的密码是否与浏览器生成的完全一致,可以通过对比加密结果或查看服务器响应是否正确。如果加密不正确,可能需要调试JS代码,检查是否有浏览器环境特有的对象或方法在JMeter中不可用,这时可能需要模拟这些环境或者修改JS代码。 用户可能还会关心如何高效地管理和维护这些脚本,比如将公共的JS代码模块化,方便不同测试计划重复使用。此外,性能方面,使用JSR223时选择Groovy并启用缓存编译脚本,可以提高测试的执行效率。 总结下来,步骤应该是:分析前端加密方法→提取JS加密代码→在JMeter中加载JS→处理动态参数→执行加密→发送请求。同时注意处理依赖和引擎兼容性问题,确保加密结果正确。</think>### JMeter实现与浏览器相同的密码加密传输步骤 --- #### 一、分析浏览器加密逻辑 1. **查看网页源代码** 打开浏览器开发者工具(F12),定位登录请求的`password`字段,观察其加密特征。例如: ```javascript data.password = hex2b64(rsaKey.encrypt(data.password)); // 引用RSA加密逻辑[^2] ``` 2. **提取加密算法** 找到前端使用加密库(如`jsencrypt.min.js`或自定义JS文件),保存加密函数逻辑。 --- #### 二、在JMeter实现加密 1. **添加HTTP请求获取动态参数** - 若加密需要动态参数(如公钥、盐值),先发送获取参数的请求,并通过`正则表达式提取器`或`JSON提取器`捕获参数[^3]。 ```plaintext 示例正则表达式:`"publicKey":"(.*?)"` ``` 2. **加载加密JS文件** - 在测试计划中添加`HTTP请求`下载加密所需的JS文件(如`rsa.js`)。 - 使用`JSR223 Sampler`或`BeanShell Sampler`加载并执行JS代码: ```javascript load("rsa.js"); var encryptedPassword = RSA.encrypt(vars.get("password"), vars.get("publicKey")); vars.put("encryptedPassword", encryptedPassword); ``` 3. **处理加密依赖** - 若JS代码依赖浏览器环境(如`window`对象),需使用`Browserify`或`Webpack`打包成独立模块,或在JMeter中模拟缺失对象。 --- #### 三、配置登录请求 1. **参数化加密结果** - 在登录请求的`参数`或`Body Data`中引用加密后的变量: ```plaintext username=${username} password=${encryptedPassword} ``` 2. **验证加密结果** - 添加`调试采样器`检查加密后的值是否与浏览器一致。 --- #### 四、优化与注意事项 1. **性能优化** - 使用`JSR223 Sampler`时选择`groovy`语言,并启用`Cache compiled script`提升执行效率[^4]。 2. **动态参数更新** - 对需要定期刷新的参数(如Token),通过`While控制器`循环获取最新值。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值