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

  • 📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢交流讨论:欢迎加入我们一起学习!
  • 📢资源分享:耗时200+小时精选的「软件测试」资料包
  • 📢 软件测试学习教程推荐


最近遇到的一个接口传参使用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 10242、生成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);

最后我邀请你进入我们的软件测试学习交流群, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路

感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/241020.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue.js实战:构建现代单页应用程序(SPA)的实用指南

欢迎来到《Vue.js实战指南》!本博客将深入探讨如何通过Vue.js构建现代单页应用程序(SPA)。无论你是初学者还是有一定经验的开发者,这里都有关键的实用指南,帮助你从概念到实际应用中构建强大的SPA。准备好迎接Vue.js的…

SQL分类

SQL分类 DDL 查询库 查询表 创建表 修改表 DML 添加数据 修改数据 删除数据 DQL 基本查询 条件查询 聚合函数 分组查询 排序查询 分页查询 执行顺序 DCL 管理用户 管理权限 数据类型 数值类型 字符串类型 日期类型

【Py/Java/C++三种语言OD2023C卷真题】20天拿下华为OD笔试之【模拟】2023C-结队编程【欧弟算法】全网注释最详细分类最全的华为OD真题题解

文章目录 题目描述与示例题目描述输入描述输出描述示例一输入输出说明 示例二输入输出说明 解题思路代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 题目描述与示例 题目描述 某部门计划通过结队编程来进行项目开发,已知该部门有 N 名员工…

startUML6.0.1破解方法

startUML6.0.1破解方法 文章目录 startUML6.0.1破解方法1.startUML6.0.1快速破解2.概述3.安装Nodejs4.安装asar5.修改app.asar中的源码6.将修改后的源码重新压缩7.覆盖官方的asar文件8.重启startUML9.参考文档 1.startUML6.0.1快速破解 后绪步骤可以不看,直接下载我…

使用@jiaminghi/data-view实现一个数据大屏

<template><div class"content bg"><!-- 全局容器 --><!-- <dv-full-screen-container> --><!-- 第二行 --><div class"module-box" style"align-items: start; margin-top: 10px"><!-- 左 -->…

1162字符串逆序

一&#xff1a;题目 二.思路分析 1.如果不用递归&#xff0c;可以输入字符串后&#xff0c;再逆序输出&#xff0c;但是题目要求使用递归 2.使用递归&#xff1a; 2.1输入字符&#xff0c;直到输入的字符是‘&#xff01;’&#xff0c;停止输入&#xff0c;否则继续输入&…

自学华为鸿蒙开发?一般人我还是劝你算了吧!!!

本人纯屌丝一枚&#xff0c;在学编程之前对电脑的认知也就只限于上个网&#xff0c;玩个办公软件。这里不能跑题&#xff0c;我为啥说自学鸿蒙开发&#xff0c;一般人我还是劝你算了吧。因为我就是那个一般人。 基础真的很简单&#xff0c;是个人稍微认点真都能懂&#xff0c;…

Java八股文面试全套真题【含答案】- MyBatis Plus 篇

MyBatis Plus 是什么&#xff1f;它与 MyBatis 有什么区别&#xff1f; 答&#xff1a;MyBatis Plus 是基于 MyBatis 进行扩展的一款持久层框架&#xff0c;它提供了一系列增强功能&#xff0c;简化了 MyBatis 的使用。与 MyBatis 相比&#xff0c;MyBatis Plus 提供了更多的便…

【vscode插件】之点击指令,顶部弹出输入框 可以输入指令,获取输入的内容

ChatgGPT4.0国内站点: 海鲸AI-支持AI会话&#xff0c;文件分析&#xff0c;AI绘图 在Visual Studio Code&#xff08;VSCode&#xff09;中创建一个插件&#xff0c;使得当用户点击一个指令时&#xff0c;顶部会弹出一个输入框并允许用户输入内容&#xff0c;可以通过使用VSCo…

win10下使用fastdds

参照网址&#xff1a;https://www.cnblogs.com/edkong/p/16522836.html 需要安装的软件和用处&#xff1a; Visual Studio&#xff0c;用于打开和编译fastdds示例工程。下载地址&#xff1a;下载 Visual Studio Tools - 免费安装 Windows、Mac、LinuxCmake&#xff0c;用于将…

【String str = new String(“hollis“) 创建了几个对象?】

✅典型解析 创建的对象数应该是1个或者2个。 首先要清楚什么是对象? Java是一种面向对象的语言&#xff0c;而Java对象在JVM中的存储也是有一定的结构的&#xff0c;在HotSpot虚机中&#xff0c;存储的形式就是oop-klass model&#xff0c;即ava对象模型。我们在Java代码中&am…

FastGPT+ChatGLM3-6b搭建知识库

前言&#xff1a;我用fastgpt直接连接chatglm3&#xff0c;没有使用oneai&#xff0c;不是很复杂&#xff0c;只需要对chatglm3项目代码做少量修改就能支持使用embeddings&#xff0c;向量模型用的m3e&#xff0c;效果还可以 我的配置&#xff1a; 处理器&#xff1a;i5-13500 …

VideoPoet: Google的一种用于零样本视频生成的大型语言模型

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【C++进阶02】多态

一、多态的概念及定义 1.1 多态的概念 多态简单来说就是多种形态 同一个行为&#xff0c;不同对象去完成时 会产生出不同的状态 多态分为静态多态和动态多态 静态多态指的是编译时 在程序编译期间确定了程序的行为 比如&#xff1a;函数重载 动态多态指的是运行时 在程序运行…

【Java异常】聊聊异常可能带来的坑

一个活生生的案例 本周帮同事排查了一个问题&#xff0c;比较诡异的是他通过测试&#xff0c;并没有找到根本原因&#xff0c;只是发现有对应的错误日志。 但是其实并没有将堆栈信息打印出来。很难看出问题。添加了 e.printStackTrace(); get exception in exter: / by zero显…

Electron执行本地cmd命令

javascript执行本地cmd命令,javascript代码怎么执行_js调用本机cmd-CSDN博客 使用 Node.js 打开本地应用_nodejs启动应用-CSDN博客 笔记:nodejs脚本唤醒本地应用程序或者调用命令-CSDN博客 electron调起本地应用_electron 调用本地程序-CSDN博客 命令行打开vscode 你可以使用…

HP笔记本电脑进入BIOS的方法主要有两种,它们使用场合不同

BIOS&#xff08;基本输入输出系统&#xff09;是一种实用程序&#xff0c;它在你按下电源按钮后启动并加载操作系统。无论是要更新HP笔记本电脑的BIOS系统&#xff0c;还是清除前一个系统中的错误&#xff0c;第一步都是进入BIOS实用程序。 在按键输入BIOS设置并对其进行修改…

循环神经⽹络中的梯度算法GRU

1. 什么是GRU 在循环神经⽹络中的梯度计算⽅法中&#xff0c;我们发现&#xff0c;当时间步数较⼤或者时间步较小时&#xff0c;**循环神经⽹络的梯度较容易出现衰减或爆炸。虽然裁剪梯度可以应对梯度爆炸&#xff0c;但⽆法解决梯度衰减的问题。**通常由于这个原因&#xff0…

如何使用CMake查看opencv封装好的函数

当我们有时想查看opencv自带的函数的源代码&#xff0c;比如函数cvCreateImage, 此时我们选中cvCreateImage, 点击鼠标右键->转到定义&#xff0c;我们会很惊讶的发现为什么只看到了cvCreateImage的一个简单声明&#xff0c;而没有源代码呢&#xff1f;这是因为openCV将很多…

Java开发框架和中间件面试题(3)

14.Spring事务中的隔离级别有哪几种&#xff1f; 在TransactionDefinition接口中定义了五个表示隔离级别的常量&#xff1a; 1⃣️ISOLATION DEFAULT&#xff1a;使用后端数据库默认的隔离级别&#xff0c;Mysql默认采用的可重复读隔离级别&#xff1b;Oracle默认采用的读已提…