最近公司的接口都是MD5  16位加密,所以要使用加密功能。

之前也做过加密,因为用的比较少,所以是写了一个加密方法,导出JAR包,调用的。用起来需要很多设置,并且换算效率也不高。听前同事说,jmeter可以自己写函数,放在函数管理里面,今天自己就根据网上的大神分享的内容,简单写一下自己使用过程。

1、首先,eclipse 加载JMeter源码,部署好(不懂的可以看我前面的随笔)

2、找到functions,添加MD5_16/32类

3、粘贴32位MD5加密代码

package org.apache.jmeter.functions;

import java.security.MessageDigest;  
import java.security.NoSuchAlgorithmException;  
import java.util.Collection;  
import java.util.LinkedList;  
import java.util.List;  
 
import org.apache.jmeter.engine.util.CompoundVariable;  
import org.apache.jmeter.functions.AbstractFunction;  
import org.apache.jmeter.functions.InvalidVariableException;  
import org.apache.jmeter.samplers.SampleResult;  
import org.apache.jmeter.samplers.Sampler;  
import org.apache.jorphan.logging.LoggingManager;  
import org.apache.log.Logger;  
 
/**
 *  
 */

@SuppressWarnings("deprecation")
public class MD5_32_Encipher extends AbstractFunction {  
    // 获取日志类  
    private static final Logger log = LoggingManager.getLoggerForClass();  
    private static final List<String> desc = new LinkedList<String>();  
    private static final String KEY = "__md5_32"; //$NON-NLS-1$  
    private static final int MAX_PARA_COUNT = 1;  
    private static final int MIN_PARA_COUNT = 1;  
    
     static {  
        desc.add("输入需要进行32md5加密的字符串!");
        
    }  
    private String str = "";  
    private Object[] values;  
 
    public MD5_32_Encipher() {  
 
    }  
 
    @Override  
    public String execute(SampleResult arg0, Sampler arg1) throws InvalidVariableException {  
        // 函数执行逻辑,通过该方法取出参数  
        str = ((CompoundVariable) values[0]).execute();  
        log.info("传入的参数为:" + str);  
        str = encryption(str);  
        log.info("加密后为:" + str);  
        return str;  
    }  
 
    @Override  
    public String getReferenceKey() {  
        // 返回函数名称  
        return KEY;  
    }  
 
    @Override  
    public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {  
        // 设置参数属性  
        checkParameterCount(parameters, MIN_PARA_COUNT, MAX_PARA_COUNT);  
        values = parameters.toArray();  
 
    }  
 
    @Override  
    public List<String> getArgumentDesc() {  
        // 返回参数描述  
 
        return desc;  
    }  
 
    // 32位小写md5加密算法  
    public String encryption(String plain) {  
        String re_md5 = new String();  
        try {  
            MessageDigest md = MessageDigest.getInstance("MD5");  
            md.update(plain.getBytes());  
            byte b[] = md.digest();  
 
            int i;  
 
            StringBuffer buf = new StringBuffer("");  
            for (int offset = 0; offset < b.length; offset++) {  
                i = b[offset];  
                if (i < 0)  
                    i += 256;  
                if (i < 16)  
                    buf.append("0");  
                buf.append(Integer.toHexString(i));  
            }  
 
            re_md5 = buf.toString();  
 
        } catch (NoSuchAlgorithmException e) {  
            e.printStackTrace();  
        }  
        return re_md5;  
    }  
}

4、找到functions,添加MD5_16类 粘贴16位MD5加密代码

package org.apache.jmeter.functions;

import java.security.MessageDigest;  
import java.security.NoSuchAlgorithmException;  
import java.util.Collection;  
import java.util.LinkedList;  
import java.util.List;  
 
import org.apache.jmeter.engine.util.CompoundVariable;  
import org.apache.jmeter.functions.AbstractFunction;  
import org.apache.jmeter.functions.InvalidVariableException;  
import org.apache.jmeter.samplers.SampleResult;  
import org.apache.jmeter.samplers.Sampler;  
import org.apache.jorphan.logging.LoggingManager;  
import org.apache.log.Logger;  
 
/**
 *  
 */

@SuppressWarnings("deprecation")
public class MD5_16_Encipher extends AbstractFunction {  
    // 获取日志类  
    private static final Logger log = LoggingManager.getLoggerForClass();  
    private static final List<String> desc = new LinkedList<String>();  
    private static final String KEY = "__md5_16"; //$NON-NLS-1$  
    private static final int MAX_PARA_COUNT = 1;  
    private static final int MIN_PARA_COUNT = 1;  
    
     static {  
        desc.add("输入需要进行16md5加密的字符串!");
        
    }  
    private String str = "";  
    private Object[] values;  
 
    public MD5_16_Encipher() {  
 
    }  
 
    @Override  
    public String execute(SampleResult arg0, Sampler arg1) throws InvalidVariableException {  
        // 函数执行逻辑,通过该方法取出参数  
        str = ((CompoundVariable) values[0]).execute();  
        log.info("传入的参数为:" + str);  
        str = encryption(str);  
        log.info("加密后为:" + str);  
        return str;  
    }  
 
    @Override  
    public String getReferenceKey() {  
        // 返回函数名称  
        return KEY;  
    }  
 
    @Override  
    public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {  
        // 设置参数属性  
        checkParameterCount(parameters, MIN_PARA_COUNT, MAX_PARA_COUNT);  
        values = parameters.toArray();  
 
    }  
 
    @Override  
    public List<String> getArgumentDesc() {  
        // 返回参数描述  
 
        return desc;  
    }  
 
    // 32位小写md5加密算法  
    public String encryption(String plain) {  
        String re_md5 = new String();  
        try {  
            MessageDigest md = MessageDigest.getInstance("MD5");  
            md.update(plain.getBytes());  
            byte b[] = md.digest();  
 
            int i;  
 
            StringBuffer buf = new StringBuffer("");  
            for (int offset = 0; offset < b.length; offset++) {  
                i = b[offset];  
                if (i < 0)  
                    i += 256;  
                if (i < 16)  
                    buf.append("0");  
                buf.append(Integer.toHexString(i));  
            }  
 
            re_md5 = buf.toString().substring(8, 24);  
 
        } catch (NoSuchAlgorithmException e) {  
            e.printStackTrace();  
        }  
        return re_md5;  
    }  
}

5、导出functions,命名为:ApacheJMeter_functions.jar

6、复制这个文件到 JMETER目录\lib\ext 下,覆盖即可(如果对自己写的代码没有信心,建议备份原来的文件后再覆盖)

7、打开JMeter,检查函数助手对话框,OK出现了,赶快去试试吧!

JMeter-Eclipse添加自定义函数 MD5加密 32位和16位的更多相关文章

  1. C# 标准的MD5加密32位

    标准的MD5加密32位小写的: public static string GetMD5(string myString) { MD5 md5 = new MD5CryptoServiceProvide ...

  2. 在线生成32位和16位大小写MD5密文

    MD5是一种不可逆的加密算法,全称是Message-Digest Algorithm 5(信息-摘要算法).是当前计算机领域用于确保信息传输完整一致而广泛使用的散列算法之一. MD5的典型应用是对一段 ...

  3. .NET Core MD5加密 32位和16位

    public class MD5Help { //此代码示例通过创建哈希字符串适用于任何 MD5 哈希函数 (在任何平台) 上创建 32 个字符的十六进制格式哈希字符串官网案例改编 /// <s ...

  4. MD5 32位、16位加密

    /// <summary> /// MD5 16位加密 /// </summary> /// <param name="ConvertString"& ...

  5. Java语言编写MD5加密方法,Jmeter如何给字符串MD5加密

    package md5package; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; ...

  6. 8位、16位、32位单片机中的“XX位”指什么?

    32位单片机的32位是指单片机的“字长”,也就是一次运算中参与运算的数据长度,这个位是指二进制位. 如果总线宽度与CPU一次处理的数据宽度相同,则这个宽度就是所说的单片机位数. 如果总线宽度与CPU一 ...

  7. MD5加密 32位

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; ...

  8. md5加密--32位16进制小写

    public class ttgameMd5 { public final static String MD5(String str) { char hexDigits[] = { // 用来将字节转 ...

  9. java字符串MD5加密后再转16进制

    话不多说上码 pom.xml <!-- MD5 --> <dependency> <groupId>org.apache.commons</groupId&g ...

随机推荐

  1. ios 视频/图片压缩

    - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...

  2. MyRocks DDL原理

    最近一个日常实例在做DDL过程中,直接把数据库给干趴下了,问题还是比较严重的,于是赶紧排查问题,撸了下crash堆栈和alert日志,发现是在去除唯一约束的场景下,MyRocks存在一个严重的bug, ...

  3. 打印Fibonacci数列方法汇总(前20项,每行5个)

    NO.1 迭代法 标签:通俗.易懂 思路:先打印第一项.再在循环里面执行fib=fib1+fib2,把fib2赋给fib1,把fib赋给fib2,每行5个可使用if函数(循环次数对5取余). #inc ...

  4. 详解Executor框架

    在Java中,使用线程来异步执行任务.Java线程的创建与销毁需要一定的开销,如果我们为每一个任务创建一个新线程来执行,这些线程的创建与销毁将消耗大量的计算资源.同时,为每一个任务创建一个新线程来执行 ...

  5. bzoj2144 【国家集训队2011】跳跳棋

    Description 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子.我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置.我们要通过最少的跳动把他 ...

  6. Java实现压缩文件与解压缩文件

    由于工作需要,需要将zip的压缩文件进行解压,经过调查发现,存在两个开源的工具包,一个是Apache的ant工具包,另一个就是Java api自带的工具包:但是Java自带的工具包存在问题:如果压缩或 ...

  7. JQuery获取元素类名

    一般而言,JQuery可以利用attr来获取元素的属性值, 1.$("元素").attr("属性");                //获取指定属性的值 2. ...

  8. 基于Activiti的流程应用开发平台JSAAS-WF V5.3

    第1章 产品概述及体系架构 1.1.概述 红迅JSAAS-WF工作流平台V5是广州红迅软件有限公司面向合作伙伴以及有IT运维团队中大型企业提供新一代的流程管理产品,它基于流行的JAVA开源技术上构建, ...

  9. 在Mvc中进行异步请求是出现(没有为该对象定义无参数的构造函数)

    解决办法就是给相应的类添加无参数的构造函数:

  10. SSM框架搭建——我的第一个SSM项目

    转载自:http://blog.csdn.net/tmaskboy/article/details/51464791 作者使用MyEclipse 2014版本 本博客所编写程序源码为: http:// ...