Jmeter对接口测试入参实现MD5加密

一、自带函数助手MD5加密

在函数助手中找到__MD5这个函数,第一个参数是要md5加密的值,第二个参数是保存加密后值的变量

在请求参数中引用该函数

发送请求可以看到密码加密了

二、beanshell脚本md5加密

在jmeter的lib目录下,自带commons-codec-1.11.jar(如果没有,可以到maven库下一个,下载地址:

https://mvnrepository.com/,然后放到jmeter的lib目录下),所以,可以借助apache工具类DigestUtils实现。

beanshell脚本

1

2

3

import org.apache.commons.codec.digest.DigestUtils; //导包

String password_md5 = DigestUtils.md5Hex("475405351qqq"); //加密

vars.put("password_md5", password_md5); //加密后的值放入到变量中

引用变量

发送请求,可以看到密码加密了

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

<think>好的,用户的问题是关于如何在JMeter中对加密接口进行测试。首先,我需要理解用户的具体需求。用户提到遇到接口加密的情况,想知道如何用JMeter解决这个问题。根据提供的引用内容,JMeter支持通过函数如digest和MD5进行加密,还有AES加密的案例。 首先,我应该分步骤来解答。常见的加密方式可能有多种,比如MD5、AES、RSA等。需要确定用户具体遇到的是哪种加密方式,但用户可能不清楚,所以需要给出通用的方法。根据引用[1]和[3],JMeter有内置的函数支持部分加密算法,比如digest函数支持7种,包括MD5。而AES可能需要使用JSR223 PreProcessor来调用Java代码。 接下来,步骤可能包括加密处理、签名生成、处理动态数如时间戳或随机数,以及如何应对更复杂的加密比如AES/RSA。每个步骤需要具体说明操作方法,比如使用__digest函数,或者Beanshell脚本,或者JSR223元件执行自定义代码。 然后,需要引用提供的考资料来支持回答,比如引用[1]提到使用digest和MD5,引用[3]提到AES加密的步骤。同时,引用[2]提到运行测试计划和结果分析,这部分可以作为验证步骤。 另外,用户可能还需要知道如何处理动态数,比如时间戳和nonce,这些可能需要通过JMeter的函数来生成,比如__time函数。对于签名sign,可能需要将多个数拼接后加密,这可以通过变量拼接和加密函数结合实现。 还要考虑不同加密算法的处理方式差异,比如对称加密AES与非对称加密RSA的不同处理方法。对于AES,可能需要导Java的加密库,编写加密方法;而RSA可能需要使用公钥加密,同样需要自定义代码。 最后,需要确保回答结构清晰,分步骤说明,并给出示例代码,比如如何使用JSR223 PreProcessor调用AES加密。同时,生成的相关问题要围绕加密测试的扩展,比如动态数处理、不同加密算法区别、性能测试注意点等。 总结下来,回答的结构应该是:分析加密类型、数处理、使用内置函数、处理动态数、处理复杂加密,然后给出示例代码,并引用相关资料。最后生成相关问题,帮助用户进一步探索。</think>### JMeter加密接口测试解决方案 #### 1. **分析接口加密类型** - 确认接口使用的加密算法(如MD5、AES、RSA等)和加密字段。 - 常见场景:加密、签名验证(如`sign`)、动态密钥等[^1][^3]。 #### 2. **加密处理** - **使用JMeter内置函数**:通过`__digest`函数实现MD5、SHA-1等加密。 ```java // 示例:对数"123456"进行MD5加密 ${__digest(MD5,123456,,,)} ``` - **签名生成**:若需拼接数后加密(如`sign=MD5(param1+param2)`),可使用`${__V(param1${param2})}`拼接变量,再调用`__digest`[^1]。 #### 3. **处理动态数** - **时间戳**:用`${__time()}`生成当前时间戳。 - **随机数**:用`${__Random(1,1000,nonce)}`生成随机数。 - 将动态数加加密逻辑,例如: ```java // 示例:sign=MD5(timestamp+nonce+data) ${__digest(MD5,${timestamp}${nonce}${data},,,)} ``` #### 4. **复杂加密算法(如AES/RSA)** - **JSR223 PreProcessor**:通过Java代码实现自定义加密。 ```java import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; // AES加密示例 String key = "youraeskey"; String data = vars.get("plaintext"); SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secretKey); byte[] encrypted = cipher.doFinal(data.getBytes()); vars.put("encryptedData", Base64.encodeBase64String(encrypted)); ``` - **导第三方JAR包**:若需扩展加密库,将JAR文件放`JMETER_HOME/lib/ext`目录。 #### 5. **测试验证** - 在HTTP请求中引用加密后的数(如`${encryptedData}`)。 - 使用`View Results Tree`检查请求是否包含正确的加密字段[^2]。 --- ### 示例:测试AES加密接口 ```java // JSR223 PreProcessor脚本(选择Groovy语言) import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Hex; String key = "your-secret-key"; String data = "plaintext"; SecretKeySpec secretKey = new SecretKeySpec(key.getBytes("UTF-8"), "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secretKey); byte[] encrypted = cipher.doFinal(data.getBytes("UTF-8")); vars.put("encryptedData", Hex.encodeHexString(encrypted)); // 将加密结果存变量 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值