当前位置:网站首页>【接口测试】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自动化测试/测试开发,走向高薪之路。
喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一 键三连哦!
边栏推荐
猜你喜欢

外骨骼机器人(七):标准步态数据库

Fork/Join线程池

MySQL 中出现的字符编码错误 Incorrect string value: ‘\x\x\x\x‘ for column ‘x‘

Pytorch框架学习记录9——非线性激活

移植MQTT源码到STM32F407开发板上

AQS原理和介绍

Questions I don't know in database kernel interview(1)

Little data on how to learn?Jida latest small learning data review, 26 PDF page covers the 269 - page document small data learning theory, method and application are expounded

【Social Media Marketing】How to know if your WhatsApp is blocked?
![[Personal work] Wireless network image transmission module](/img/64/c0cec74692df7ca05c1a5317e21c9d.png)
[Personal work] Wireless network image transmission module
随机推荐
仿牛客论坛项目
idea插件generateAllSetMethod一键生成set/get方法以及bean对象转换
Qt设置应用程序开机自启 解决设置失败原因
New graduate students, great experience in reading English literature, worthy of your collection
JS提升:手写发布订阅者模式(小白篇)
Remove 360's detection and modification of the default browser
98. Embedded controller EC actual combat EC development board development completed
360借条安全专家:陌生微信好友不要轻易加贷款推广多是诈骗
kubernetes各名词缩写
和我一起写一个音乐播放器,听一首最伟大的作品
2022年秋招,软件测试开发最全面试攻略,吃透16个技术栈
响应式织梦模板美容整形类网站
】 【 nn. The Parameter () to generate and why do you want to initialize
R语言 线性回归的有关方法
Godaddy domain name resolution is slow and how to use DNSPod resolution to solve it
相亲模型与有限状态机
Interview assault 70: what is the glue bag and a bag?How to solve?
【luogu P1912】诗人小G(二分栈)(决策单调性优化DP)
C专家编程 第1章 C:穿越时空的迷雾 1.4 K&R C
面试突击70:什么是粘包和半包?怎么解决?