最近公司的接口都是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. Git协作

    前面的话 本文将详细介绍Git多人协作的具体内容 远程仓库 当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. ...

  2. 初学grunt压缩

    初学grunt 压缩,做个记录.备忘. [JS压缩] 先比较yui compressor 与 uglify  代码压缩, yui compressor,使用起来很简单.需要jdk. https://g ...

  3. .NET插件技术-应用程序热升级

    今天说一说.NET 中的插件技术,即 应用程序热升级.在很多情况下.我们希望用户对应用程序的升级是无感知的,并且尽可能不打断用户操作的. 虽然在Web 或者 WebAPI上,由于多点的存在可以逐个停用 ...

  4. Android性能优化——之防止内存泄露

    又是好久没有写博客了,一直都比较忙,最近终于有时间沉淀和整理一下最近学到和解决的一些问题. 最近进行技术支持的时候,遇到了几个崩溃的问题,都是OOM异常,一般OOM异常给人的感觉应该是加载大图片造成的 ...

  5. linux网络编程(socket)之面向连接(TCP/IP)

    1.流程 服务器: 创建socket: 绑定端口: 监听: 监听到有连接请求,接受请求: 建立连接,开始对话. 客户端: 创建socket: 请求建立连接: 连接建立成功,开始对话. 2.实例代码 / ...

  6. 好久没发贴了,最近捣鼓了个基于node的图片压缩小网站解析。

    看了下,距离上次发帖都是去年10月份的事,忙于工作的我很少跑博客园里面来玩了. 做这个小网站的初衷是 https://tinypng.com/ 这个网站有时候访问很慢,然后自己去研究了下图片压缩. 网 ...

  7. 存储容量和IOPS的关系

    在云计算时代,数据量成几何形式增加,必然会考虑增加存储容量,但是增加存储容量不简单存储性能得到提升,他们之间没有必然的联系: 存储容量,就是指存储设备上能够存储数据的大小,比如,一个磁盘阵列有50T的 ...

  8. MongoDB3.4 shell CRUD操作

    输入db,显示你正在操作的数据库:切换数据库,输入use dbName,如果数据库不存在的话会自动帮我们创建一个:使用show dbs可以显示所有可用的数据库. 测试数据在文末 插入文档 插入操作的行 ...

  9. 【Windows 10 应用开发】跟随系统主题颜色

    有些时候,希望应用程序中的某些颜色可以与系统的主题颜色相同,并且当系统主题色改变时进行同步. 实现过程并不复杂,主要用到 UISettings 类,它公开一个 GetColorValue 方法,访问这 ...

  10. MNIST机器学习

    MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片: 1. MNIST数据集 MNIST,是不是听起来特高端大气,不知道这个是什么东西? == 手写数字分类问题所要用到的(经典)MNIS ...