Jmeter引用js实现RSA加密
来源:互联网 发布:手机在线电视直播软件 编辑:程序博客网 时间:2024/06/02 05:32
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 = password.split("").reverse().join("");
//对密码进行加密传输
var encrypedPwd = RSAUtils.encryptedString(key,reversedPwd);
jQuery('#subPwd').val(encrypedPwd);
jQuery('#loginPwd').val("");
jQuery('#login').submit();
}
}
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 = password.split("").reverse().join("");
//对密码进行加密传输
var encrypedPwd = RSAUtils.encryptedString(key,reversedPwd);
jQuery('#subPwd').val(encrypedPwd);
jQuery('#loginPwd').val("");
jQuery('#login').submit();
}
}
如何在jmeter中执行这个js,获得加密后的串呢?
首先调用请求获取公钥所需的参数(exponent、modulus)
通过正则表达式提取到参数后,作为参数传递到JSR223前置处理器中,生成公钥,然后再对登录密码进行加密。
JSR223前置处理器及写出的脚本如下图
这里exponent、modulus、passwd应该是在上一请求中获取后作为变量传入,这里简化,直接给定,最后将加密后的字符串输出到变量data中,以供后续使用。
load("security.js");
print("starttest");
function RSA(){
var exponent="10001";
var modulus="eba486abd41cc0950eae9972f58f43c62bba871660b86905cebbbbffcac137915744a2d37c25a8915562343602761293297baf84386da8ab7e847338f4b0aa347bfd847c55319d18efc0d80286509fd5a73bd182d97f3949efdc070e103c89639a415b8e579628d2d182b8a1b544889ae364c43cae42b1c53b423514c9973d67";
var passwd="1234";
var publicKey = new RSAUtils.getKeyPair(exponent, '', modulus);
return RSAUtils.encryptedString(publicKey, passwd);
}
var data = RSA();
log.info(data);
vars.put("Password",data);
在执行过程中遇到几个问题,
1、 Problem in JSR223 script JSR223 PreProcessor javax.script.ScriptException: ReferenceError: "window" is not defined in security.js at line number 10
at jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:470)
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:454)
解决办法:报window未定义,window为security.js中引入,为浏览器执行js执行的全局对象。
此问题排查了很久,网上也未有说明,最后找到是Nashorn JS脚本引擎并不支持浏览器的这些对象,需要对js脚本进行改造。后来检索JavaScript 对象,了解到在顶层 JavaScript 代码中,可以用关键字 this 引用全局对象。将js末尾的window修改为this后未再报错。
2、在前置处理器中引用js脚本,但是实际脚本不运行也不报错
解决办法:需要将js脚本放到jemete bin目录下调用,将前置处理器中的文件选择清空。执行成功,不报错。
3、调试时可用 log.info(data);或print("starttest");进行打印输出。
4、要加密的字符串需要反序处理,否则解密后字符串是反的。(此问题与加密js有关)
var reversedPwd = password.split("").reverse().join("");
阅读全文
0 0
- Jmeter引用js实现RSA加密
- 利用security.js实现RSA加密
- 关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名
- 关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名
- Java 实现Rsa 加密
- RSA加密,java实现
- java实现RSA加密
- java实现RSA加密
- JAVA实现RSA加密
- android RSA 加密实现
- JAVA实现RSA加密
- Java实现RSA加密
- python实现rsa加密
- rsa实现js前台加密java后台解密
- RSA前端JS加密,后端JAVA解密实现
- rsa实现js前台加密java后台解密
- RSA前端JS加密,后端JAVA解密实现
- RSA前端JS加密,后端JAVA解密实现
- c++中使用exit()需要include
- 数据业务建立流程之APN参数的激活
- 【深度】“信息瓶颈”理论揭示深度学习本质,Hinton说他要看1万遍
- java后台调用JS代码判断浏览器版本是否低于IE9,低版本跳转不同页面
- vue.js与其他前端框架的对比
- Jmeter引用js实现RSA加密
- Xcode9模拟器圆角切换成直角
- MySQL数据库limit分页、排序-SQL语句示例
- python的环境搭建
- SSH框架入门(3)——struts2(3)
- Mysql Order By varchar 类型数据
- 数据业务建立流程之发起网络连接过程
- spring aop :logaspect配置
- Linux内核部件分析 设备驱动模型的基石kobject