当前位置:网站首页>【接口测试】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自动化测试/测试开发,走向高薪之路。
喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一 键三连哦!
边栏推荐
- What is the difference between a utility model patent and an invention patent?Understand in seconds!
- JS提升:如何中断Promise的链式调用
- C陷阱与缺陷 第8章 建议与答案 8.1 建议
- 任务调度线程池-应用定时任务
- 密码学的基础:X.690和对应的BER CER DER编码
- excel高级绘图技巧100讲(二十二)-如何对不规则数据进行分列
- C专家编程 第1章 C:穿越时空的迷雾 1.1 C语言的史前阶段
- Where should I prepare for the PMP exam in September?
- [Personal work] Wireless network image transmission module
- Pytorch框架学习记录9——非线性激活
猜你喜欢
随机推荐
Custom command to get focus
Simple test of the use of iptables
360借条安全专家:陌生微信好友不要轻易加贷款推广多是诈骗
虚拟机的IP地址自动变为127.0.0.1
织梦发布文章提示body has not allow words错误
idea插件generateAllSetMethod一键生成set/get方法以及bean对象转换
【Dart】dart构造函数学习记录(含dart单例模式写法)
通过这两个 hook 回顾 Set/Map 基础知识
Buttons with good user experience should not have hover state on mobile phones
Pytorch框架学习记录10——线性层
系统收集集
The configuration manual for the secondary development of the XE training system of the missing moment document system
What is the difference between a utility model patent and an invention patent?Understand in seconds!
数据库单字段存储多个标签(位移操作)
R语言进行相关的操作
记录第一次给开源项目提 PR
tiup mirror
system collection
1374. 生成每种字符都是奇数个的字符串 : 简单构造模拟题
latex paper artifact -- server deployment overleaf








