前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【接口测试】JMeter调用JS文件实现RSA加密

【接口测试】JMeter调用JS文件实现RSA加密

作者头像
用户9913368
发布2022-12-17 18:02:30
5.4K0
发布2022-12-17 18:02:30
举报
文章被收录于专栏:嘎嘎软件测试嘎嘎软件测试

目录

一、公私钥

二、JMeter配置

三、踩坑

最近遇到的一个接口传参使用jsencrypt进行RSA加密,于是我查阅资料发现JMeter的JSR233 预处理程序可以调用js文件。

jsencrypt项目地址:https://github.com/travist/jsencrypt/ ,里面有使用教程,接下来是JMeter如何调用JS文件实现RSA加密的过程。

一、公私钥

在线生成公私钥:http://tool.chacuo.net/cryptrsapubkey 。

本地生成公私钥:

代码语言:javascript
复制
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、脚本文件。

代码语言:javascript
复制
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、查看日志

三、踩坑

报错:

代码语言:javascript
复制
报错:javax.script.ScriptException: ReferenceError: "navigator" is not defined in https://passport.cnblogs.com/scripts/jsencrypt.min.js at line number 3

?

解决:提示js文件中的navigator、window未定义(与浏览器有关的对象),在文件头加上下面两行即可,(虽然不是很理解前端的这些内容,加就完事了)

代码语言:javascript
复制
var navigator = this;
var window = this;

?

问题:调用接口获取公钥再进行加密,一直加密失败。

原因:JMeter会将\n转换为%,开始我就怀疑是\n的问题,坑爹的是打印出来的公钥值显示正常,实际上传进去的时候转为%,而且直接传值的时候有\n也能正常加密,几个骚操作下来,这问题折腾好长时间,好在解决啦。

解决:将\n去掉。

代码语言:javascript
复制
var publickey = vars.get("publickey");
log.info("获取到的publickey===="+publickey);   

var publickey = publickey.replace(/\\n/g, "");  // 注意:这里是\\n
vars.put("publickey", publickey);
log.info("去掉换行后的publickey="+publickey);

文章集合

https://docs.qq.com/sheet/DTFd6QVZWRExLbnla

https://www.processon.com/view/link/615eae81e0b34d06f3dcdf4b

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-07-31,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 嘎嘎软件测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com