当前位置:网站首页>【接口测试】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自动化测试/测试开发,走向高薪之路。
喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一 键三连哦!
边栏推荐
猜你喜欢
仿牛客论坛项目
[Energy Conservation Institute] Ankerui Food and Beverage Fume Monitoring Cloud Platform Helps Fight Air Pollution
Interview Blitz 70: What are sticky packs and half packs?How to deal with it?
98. Embedded controller EC actual combat EC development board development completed
进行交互或动画时如何选择Visibility, Display, and Opacity
OSG Notes: Set DO_NOT_COMPUTE_NEAR_FAR to manually calculate far and near planes
关于Request复用的那点破事儿。研究明白了,给你汇报一下。
数据库内核面试中我不会的问题(1)
技能大赛训练:A部分加固题目
To promote energy conservation institute 】 【 the opinions of the agricultural water price reform
随机推荐
Common pits in the Go language
Digital twin Beijing the imperial palace, yuan universe is the process of tourism
R语言进行相关的操作
Application of Acrel-5010 online monitoring system for key energy consumption unit energy consumption in Hunan Sanli Group
Pytorch学习记录(八):生成对抗网络GAN
有点奇怪!访问目的网址,主机能容器却不行
ahooks 是怎么处理 DOM 的?
Go Atomic
system collection
Pytorch框架学习记录9——非线性激活
15 分钟带你入门 Grafana
C专家编程 前言
案例:MySQL主从复制与读写分离
MySQL语法基础
[Energy Conservation Institute] Application of Intelligent Control Device in High Voltage Switchgear
数据库内核面试中我不会的问题(1)
R语言 数据的关系探索
系统收集集
[Multi-task learning] Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts KDD18
iptables的使用简单测试