JMeter请求数据BASE64加密
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JMeter请求数据BASE64加密相关的知识,希望对你有一定的参考价值。
参考技术A 在测试时,我们发现某请求的入参wbcsh的值是经过BASE64加密的,而这个入参是前面的请求的响应信息的某一段json数据。如图所示data下面tbsj里的value值即是我们要关联的入参。
于是,我通过正则表达式提取出来,存入变量:tbsj。
执行后结果如下图所示:
加密成功,执行成功。
Jmeter(二十四)Jmeter-Question之“加密请求参数”
日常接口测试碰到参数加密的情况不在少数,当然与之相对的也有解密。直接记录实例:
排除各家用的不一样的加密方式,用的最多的还是MD5加密(16,32)。Jmeter3.2版本已经有解决方案
1、${__MD5(,)}函数(默认32位),当然也有其他类型的加密函数:base64
用法很简单,与一般函数使用一般无二。
粘贴一个实例:
加密之后的结果一致。
2、第一种方法只是Jmeter自带功能以满足需求,当然,也有满足不了的时候,因此第二种方法就显得相对灵活一些,还是MD5(32)加密。
解决思路:使用Beanshell Sampler进行实例化外部jar包;
先贴段MD5加密代码:
1 package hehe.md5; 2 3 import java.security.MessageDigest; 4 import java.security.NoSuchAlgorithmException; 5 6 public class Str2MD5 { 7 //32 8 public String MD5(String sourceStr) { 9 String result = ""; 10 try { 11 MessageDigest md = MessageDigest.getInstance("MD5"); 12 md.update(sourceStr.getBytes()); 13 byte b[] = md.digest(); 14 int i; 15 StringBuffer buf = new StringBuffer(""); 16 for (int offset = 0; offset < b.length; offset++) { 17 i = b[offset]; 18 if (i < 0) 19 i += 256; 20 if (i < 16) 21 buf.append("0"); 22 buf.append(Integer.toHexString(i)); 23 } 24 result = buf.toString(); 25 System.out.println("MD5(" + sourceStr + ",32) = " + result); 26 // System.out.println("MD5(" + sourceStr + ",16) = " + buf.toString().substring(8, 24)); 27 } catch (NoSuchAlgorithmException e) { 28 System.out.println(e); 29 } 30 return result; 31 } 32 }
当然,可以在外部写个类进行测试该段代码是否能够加密成功。
1 package hehe.md5; 2 import hehe.md5.Str2MD5; 3 4 public class test { 5 public static void main(String[] args){ 6 String res = new Str2MD5().MD5("dj123456"); 7 System.out.println(res); 8 } 9 }
测试结果也是与上方一致的。
将该段代码打成jar包,放入Apache Jmeter\\lib\\ext\\目录下使用Beanshell Sampler进行外部实例化:
加密之后的结果与上方一致。
以上是关于JMeter请求数据BASE64加密的主要内容,如果未能解决你的问题,请参考以下文章
Jmeter(二十四)Jmeter-Question之“加密请求参数”