当前位置:网站首页>【接口测试】JMeter调用JS文件实现RSA加密
【接口测试】JMeter调用JS文件实现RSA加密
2022-08-01 21:01:00 【爱吃 香菜】
最近遇到的一个接口传参使用jsencrypt进行RSA加密,于是我查阅资料发现JMeter的JSR233 预处理程序可以调用js文件。
jsencrypt项目地址:https://github.com/travist/jsencrypt/ ,里面有使用教程,接下来是JMeter如何调用JS文件实现RSA加密的过程。
一、公私钥
在线生成公私钥:http://tool.chacuo.net/cryptrsapubkey 。
本地生成公私钥:
1、生成1024位的私钥
openssl genrsa -out rsa_1024_priv.pem 1024
2、生成1024位的公钥
openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pem
二、JMeter配置
1、在请求右键 > 添加 > 前置处理器 > JSR233 预处理程序。

2、语言选择javascript。

3、脚本文件。
var navigator = this;
var window = this;
// 引用在线jsencrypt.min.js包,也可以下载到本地再引用
load("https://passport.cnblogs.com/scripts/jsencrypt.min.js");
log.info("jsencrypt.min.js加载成功!");
// 1、生成1024位的私钥 openssl genrsa -out rsa_1024_priv.pem 1024
// 2、生成1024位的公钥 openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pem
// 加密
function RSA_ENC(){
var encrypt = new JSEncrypt();
encrypt.setPublicKey("-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDwrTSKCQsKa64A9VKYwj5nctrRv7veopjY71dWpQdfLRrV+1ymspI+CoSnDIwJOQEkMMVeLE+UjyZGNuaS4hcSMXw/mlr2hj3xYOUoOh0kUg6mnPy2NRLl735v9DFIVDOF+iO471/tZ5w8iL8xgfrEms9npvJsW0xqbVwBzZKPcwIDAQAB-----END PUBLIC KEY-----");
username = encrypt.encrypt("root");
password = encrypt.encrypt("123456");
log.info("加密后username===="+username);
log.info("加密后password===="+password);
vars.put("username", username);
vars.put("password", password);
}
RSA_ENC();
// 解密
function RSA_DEC(){
var decrypt = new JSEncrypt();
decrypt.setPrivateKey("-----BEGIN PRIVATE KEY-----MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAPCtNIoJCwprrgD1UpjCPmdy2tG/u96imNjvV1alB18tGtX7XKaykj4KhKcMjAk5ASQwxV4sT5SPJkY25pLiFxIxfD+aWvaGPfFg5Sg6HSRSDqac/LY1EuXvfm/0MUhUM4X6I7jvX+1nnDyIvzGB+sSaz2em8mxbTGptXAHNko9zAgMBAAECgYAPdQBH0TbdT3cYZqkMWIVLfYviJq85KDYq0IxKa0Ti7vGnRoJ3zkYoJ+LHG74upXOWUG+Mkcn2n470uXfrfQvAJnzcsq7c085+mB4OnjcBcUvCpaFYbbkuQFRf10EAhwF9WStXC6cwpNmv2ncREDY1O/8DTavmFOY3fAXUjU/+CQJBAPrB2f5UiYWBfBbkp86lnfL94J9+C53OgRgunimZ1aPyrn+Ah2EZuBSIMhx7zjUV3zLcsILI5ogzvmFBbF2Svs8CQQD1tWXw9Zuc2MbgAqWBNAiDHuM4y/e1hP0MMF031mmA/ld4Kah2maNZYjcOmiYYsTsnGMWTRZOku1kCt9WoKm4dAkAA8PVWhQ63F5NVqqoOloSPQvCy6JA2mW3Wn2Yslc09fk21YNAhRy1vtksp3DUb8ecSk8190C89V6RhTRORDln1AkBoz7xwkRSUT5RmMjrPZpbK9/4NWFSORfB7ppXdH8VZlSVSyNJn5RndIxxBSlg96DxHbTW6oM9eUdyiYDDvz0mxAkEAvPWfsMAEQ1LOFu3+rT3g5j4jA471C9210ONoyFm2R55flZ7arwVx92slJnA6vxuiyIek4ACur6sI3mIIz5JXgA==-----END PRIVATE KEY-----");
var username = decrypt.decrypt("wKZqudvp5+WJpkKTI8YFGza0sUeZVig+IFcreZDEJFcvu+0yrs2K3oqCudpMQKd5enJ5pwNbdtkEgVu/QQmVRsQd9UjqqdD8kpyHgdi3cORuLlcAXNtGQUoTJX4FibASXDK4hM6sMfLmUfGTXRmrzcEUi69YDnjnoXdEhdYWwvM=");
var password = decrypt.decrypt("A10cBVGAFjV8kVG54kJ0kLTqTpmJPLkM+21F9UEuwzEkcwyLgsUINGPfyANRWNz74vL5IxlaQaqt+r9lGySphT5Wtb4LQQcm9tEKafHF1ZapgC0IrblBQTcu9WrRB1D8qtk7d6AiPttIPYxwcCyQAwdoXSY2wxKDCtleBdCkm/I=");
log.info("解密后username===="+username);
log.info("解密后password===="+password);
}
RSA_DEC();
4、查看日志

三、踩坑
报错:
报错:javax.script.ScriptException: ReferenceError: "navigator" is not defined in https://passport.cnblogs.com/scripts/jsencrypt.min.js at line number 3
解决:提示js文件中的navigator、window未定义(与浏览器有关的对象),在文件头加上下面两行即可,(虽然不是很理解前端的这些内容,加就完事了)
var navigator = this;
var window = this;
问题:调用接口获取公钥再进行加密,一直加密失败。
原因:JMeter会将\n转换为%,开始我就怀疑是\n的问题,坑爹的是打印出来的公钥值显示正常,实际上传进去的时候转为%,而且直接传值的时候有\n也能正常加密,几个骚操作下来,这问题折腾好长时间,好在解决啦。
解决:将\n去掉。
var publickey = vars.get("publickey");
log.info("获取到的publickey===="+publickey);
var publickey = publickey.replace(/\\n/g, ""); // 注意:这里是\\n
vars.put("publickey", publickey);
log.info("去掉换行后的publickey="+publickey);
现在我邀请你进入我们的软件测试学习交流群:【746506216】,备注“入群”, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路。
喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一 键三连哦!
边栏推荐
- 封装一个管理 url 状态的 hook
- Failed to re-init queues : Illegal queue capacity setting (abs-capacity=0.6) > (abs-maximum-capacity
- 职场如象棋,测试/开发程序员如何突破成长瓶颈期?
- C专家编程 第1章 C:穿越时空的迷雾 1.2 C语言的早期体验
- 如何封装 cookie/localStorage/sessionStorage hook?
- MySQL Syntax Basics
- 虚拟机的IP地址自动变为127.0.0.1
- Common pits in the Go language
- Application of Acrel-5010 online monitoring system for key energy consumption unit energy consumption in Hunan Sanli Group
- idea实用快捷键合集——持续更新
猜你喜欢
随机推荐
Where should I prepare for the PMP exam in September?
Convolutional Neural Network (CNN) mnist Digit Recognition - Tensorflow
AQS原理和介绍
【Dart】dart构造函数学习记录(含dart单例模式写法)
网络安全与基础设施安全局(CISA):两国将在网络安全方面扩大合作
Protocol Buffer usage
STAHL touch screen repair all-in-one display screen ET-316-TX-TFT common faults
Buttons with good user experience should not have hover state on mobile phones
徒步,治好了我的精神内耗
Failed to re-init queues : Illegal queue capacity setting (abs-capacity=0.6) > (abs-maximum-capacity
使用百度EasyDL实现厂区工人抽烟行为识别
excel高级绘图技巧100讲(二十二)-如何对不规则数据进行分列
Interview assault 70: what is the glue bag and a bag?How to solve?
kubernetes各名词缩写
wps excel 插入公式 整列
[Multi-task learning] Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts KDD18
Fork/Join线程池
相亲模型与有限状态机
职场如象棋,测试/开发程序员如何突破成长瓶颈期?
算法---解码方法(Kotlin)









