最近公司的接口都是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. /etc/postfix下 main.cf 配置文件详解

    postconf -n   #别名数据库(postalias/newaliases 命令生成) alias_database = hash:/etc/postfix/aliases   #别名表,列出 ...

  2. 20分钟快速了解Redis

    Redis可以说是目前最火爆的NoSQL数据库! 过去几年,Memcached很盛行,现在有很多公司已将Memcached替换成了Redis.当然,很多人替换并不清楚为什么,只是感觉不想让主流抛弃,这 ...

  3. [视频]物联网&集成系统中的物联交互、数据存储、效果展示形成快速解决方案。附:ServerSuperIO 3.6.2 版本发布。

    ServerSuperIO v3.6.2版本更新内容: 设备驱动与实时库对接的Tag配置与OPC Client读取数据的配置统一用一个配置文件. 设备驱动继承DeviceDynamic接口的子类支持存 ...

  4. c# 基础算法(一) 九九乘法

    闲来无事,偶见某贴子里面讨论面试题.突然对一题产生了兴趣,做一道99乘法打印(主要是我工作了2家单位,还没有一家单位在面试时给我出这一道题)于是试着自己写写看.大概逻辑如下 class program ...

  5. jDialects:一个从Hibernate抽取的支持70多种数据库方言的原生SQL分页工具

    jDialects(https://git.oschina.net/drinkjava2/jdialects) 是一个收集了大多数已知数据库方言的Java小项目,通常可用来创建分页SQL和建表DDL语 ...

  6. Eclipse显示内存占用

  7. 如何设置文本不换行省略号显示等CSS常用文本属性

    如何让多余的文本省略号显示首先要说几个属性的作用: whitespace:nowrap 中文行末不断行显示 overflow: 控制超出文本的显示方式:hidden 超出范围文本隐藏:scroll 始 ...

  8. office web apps 部署-搭建域控服务器

    开始第一条先说注意事项:我所配置的环境是用了三台2012server虚拟机,三台虚拟机必须要加下域控,而且登录操作的时候必须以域账号登录,否则测试不通过!在笔记本上搭建了两个虚拟机(window se ...

  9. pthread的lowlevellock

    pthread的lowlevellock是futex的最简单的锁应用.也是pthread其它同步原语最基本的锁.lowlevellock提供(或实现)了三种锁(方法),一是基于0或1的互斥的锁规则,二 ...

  10. Lua快捷键

      快捷键 含义 ctrl + shift + L 多行编辑 ctrl + D 继续向下选中下一个相同的文本 Alt + F3 选中所有相同所选中德文本