jmeter 实现md5/sha256/sha512加密方式

jmeter 要实现md5、sha-256、sha-512的加密方式,主要有两种,一种是jmeter自带的digest函数,另一种就行通过beanshell方式实现。这两种的区别,主要是自带的digest函数使用简单,但由于是经过一层封装过,常规的加密方式还适用,但复杂一点的加密逻辑不太方便操作。而beanshell 由于是通过代码方式实现的。因而可以根据实际需要,调整响应的加密逻辑。比如:先加密一次后,再加盐,再二次加密。但是beanshell的要求也更高因为要了解相关的加密代码。比如:java、javascript、python 等方式。都可以用于jmeter的beanshell。只不过需要引入相应的jar包。

下面看下jmeter的digest函数支持的加密类型,常用的大体如下:

  • MD5
  • SHA-224
  • SHA-256
  • SHA-384
  • SHA-512

jmeter帮助文档上还显示有其他的加密方式,但其实比较少用到。

在jmeter Function 面板中,找到的digest函数格式及说明,如下:

jmeter 的md5/sha-256/sha-512加密方式一:digest函数

Digest MD5的加密效果

将结果转换大写内容:

MD5 加盐

(缺点:由于封装在jmeter内部,不知道这个盐是怎么实现的,如果要实现复杂一写的加密方式,可能无法达到预期想要的)

Sha-256加密

sha-512加密:

(sha-256/sha-512也支持加盐或结果大小写转换,用法与md5一致)

Jmeter md5/sha-256/sha-512加密方式二:beanshell形式

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
 
public class DigestExample {
    public static String encryptExample(String input,String saltValue) {
        try {
            // 创建md5加密对象
            MessageDigest md = MessageDigest.getInstance("md5");
            // 执行加密操作
            
            String input = input+saltValue;
          
            byte[] messageDigest = md.digest(input.getBytes());
            // 将字节数组转换为16进制字符串
            StringBuilder hexString = new StringBuilder();
            for (byte b : messageDigest) {
                String hex = Integer.toHexString(0xff & b);
                if (hex.length() == 1) {
                    hexString.append('0');
                }
                hexString.append(hex);
            }
            // 返回加密后的字符串
            return hexString.toString();
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }
 
//    public static void main(String[] args) {
//        String input = "password123";
//        String encrypted = encryptExample(input);
//        System.out.println("Original: " + input);
//        System.out.println("Encrypted: " + encrypted);
//    }
}

DigestExample md =new  DigestExample();
String value = md.encryptExample("test","");
log.info("MD5加密未加盐:"+value);
String t = "${__time(,)}";
String value_salt = md.encryptExample("test",t);
log.info("时间戳:"+t);
log.info("MD5加密加盐:"+value_salt);
//将加密结果设置为jmeter的参数,便于后面引用
vars.put("md5_value",value);

运行结果:

Beanshell sha-256sha-512与上面的md5的差不多。只需要将MessageDigest md = MessageDigest.getInstance("md5"); md5替换成sha-256/sha512即可.

如下:

 

posted @ 2024-12-09 15:06  西夏一品唐  阅读(16)  评论(0编辑  收藏  举报