Jmeter MD5加密及其运用
阅读原文时间:2023年08月29日阅读:2

常用的几种加密方式

参数说明:

String to calculate MD5 hash(必填):要加密的字符串

Name of variable in which to store the result (optional):存储结果的变量的名称****

1、使用${__MD5(13300001111,phone)}进行MD5加密,加密结果为32位小写

2、使用${__uppercase(,)}可以将加密结果转为大写,例如:${__uppercase(${__MD5(13300001111,phone)},)}

参数说明:

Digest algorithm(必填):加密算法,支持:MD2、MD5、SHA-1、SHA-224、SHA-256、SHA-384、SHA-512

String to be hashed(必填):需要加密的字符串

Salt to be used for hashing (optional):用于加密的盐

Upper case result, defaults to false (optional):大写结果,默认为false

Name of variable in which to store the result (optional):存储结果的变量的名称

使用实例:${__digest(MD5,13300001111,,true,)},对字符串进行MD5加密,并将加密结果转为大写。

在Jmeter中添加BeanShell Sampler,使用如下代码进行加密。

// md5
import org.apache.commons.codec.digest.DigestUtils;

String str = "${token}" + "${appkey}" + "${data}";
String sign = DigestUtils.md5Hex(str);
log.info("加密后的标签为:" + sign);

vars.put("sign",sign);

// sha256
import org.apache.commons.codec.digest.DigestUtils;

String keytoSign = "需要进行加密的字符串";
String sign = DigestUtils.sha256Hex(keytoSign);
log.info("加密结果为:"+sign);

vars.put("sign",sign);

在Jmeter中添加JSR223 Sampler,语言选择python,代码如下:

import hashlib

str = "13300001111"
m = hashlib.md5()
b = str.encode(encoding='utf-8')
m.update(b)
str_md5 = m.hexdigest()
str_md5 = str_md5.upper()

vars.put("phone",str_md5)

需要注意的是,JSR223 Sampler只支持python2,不支持python3。

实际运用

工作场景:现有一个接口,需要调用10000笔,入参中的CELL_PHONE_HASH不能重复。这里选择

Jmeter内置的DigestUtils方法来编写脚本代码。

import org.apache.commons.codec.digest.DigestUtils;

String str = "15510${__Random(10000,20000,)}6";
String phone = DigestUtils.md5Hex(str);
vars.put("md5_phone",phone.toUpperCase());

log.info("CELL_PHONE的值为:" + str);
log.info("CELL_PHONE加密后的值为:" + phone);

在接口入参中CELL_PHONE_HASH引用该变量,保存脚本然后运行。

通过Debug Sampler可以看到手机号MD5随机生成,接口调用成功。