最近公司的接口都是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. PIC32MZ Live update bootloader

    PIC32MZ 的 flash memory 支持live update, 这是个全新的特性,在之前的所有PIC不管是8位还是16位的单片机上面都没有这个特性.我写过很多PIC 8位和16位单片机的b ...

  2. JSON的数据类型

    数据类型简介 在计算机中,我们需要知道正在处理什么类型的数据,因为不同类型的数据有着不同的操作途径.可以让两个阿拉伯数字相乘,但是不能让两个单词相乘. 在计算机科学中,有一种数据类型被称为原始数据类型 ...

  3. 跨web浏览器的IC卡读卡器解决方案

    BS结构的程序,如果要与IC卡读卡器通信本身就是件不容易解决的事情.微软的activex ocx技术将这种应用限制在IE浏览器上了,不兼容其它的浏览器.而Chrome使用插件也不兼容IE和其他的浏览器 ...

  4. 你绝对想不到R文件找不到(cannot resolve symbol R)的原因

    你绝对想不到R文件找不到(cannot resolve symbol R)的原因 最近在项目开发中 Android Studio 的 R 文件突然找不到了.IDE 中出现了以下提示 cannot re ...

  5. Jquery Validation 验证控件的使用说明

    转载自:http://blog.csdn.net/huang100qi/article/details/52453970,做了一些简化及修改 下载地址:https://jqueryvalidation ...

  6. CF #349 div1 B. World Tour

    题目链接:http://codeforces.com/problemset/problem/666/B 大意是给一张有向图,选取四个点,使得走这四个点,任意两个点之间走最短路,总距离最长. 3000个 ...

  7. Python的内置函数open()的注意事项

    用法 : open("file_address","open_mode")例子 : f = open("D:\PycharmProjects\log. ...

  8. DirectFB 之 通过多Window实现多元素处理

    图像 设计 采用多window的方式实现显示,因为每个window可以独立的属性,比如刷新频率,也是我们最关注的 示例 /*************************************** ...

  9. 【珍藏】linux 同步IO: sync、fsync与fdatasync

    传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘I/O都通过缓冲进行.当将数据写入文件时,内核通常先将该数据复制到其中一个缓冲区中,如果该缓冲区尚未写满,则并不将其排入输出队列, ...

  10. test back

    python Mysql 下载地址 http://sourceforge.net/projects/mysql-python/