前言:
接口出于安全考虑,开发经常会对接口传输参数进行MD5、AES等方式加密,故而,这里记录下我是怎么通过jmeter去处理AES加密的。
什么是AES加密:
AES高级加密标准,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。AES是一种对称性加密方式。
目标:
进行账号注册操作,接口的请求内容需要进行AES加密,响应内容需要进行AES解密。
操作:
1、定义一个BeanShell 预处理程序“requestParams”,主要用于存放请求参数。(String存放字符串,json串中的双引号需要加个/)
2、定义一个BeanShell 预处理程序处理请求参数的加密。(这里调用了个我自己封装的jar,是用来处理AES加密的,后面会提及)
3、在HTTP请求中引用加密后的请求参数“enString”。
4、定义一个BeanShell 后置处理程序处理响应参数的解密。(同样是通过我自个封装的jar来处理AES的解密)
5、添加一个响应断言,用于判断响应是否成功。
以上就是jmeter进行AES加密请求参数、解密响应参数的基本过程。下面我将介绍下我的AES加解密工具jar。
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
public class AES {
private Cipher encrypt;
private Cipher decrypt;
/**
* 通过aes key进行构造函数初始化
* @param key
*/
public AES(String key){
if (key == null || key.length() != 16) {
throw new RuntimeException("key must 16 chars");
}
try {
byte[] encryptRaw = key.getBytes("ASCII");
SecretKeySpec encryptsKeySpec = new SecretKeySpec(encryptRaw, "AES");
encrypt = Cipher.getInstance("AES");
encrypt.init(Cipher.ENCRYPT_MODE, encryptsKeySpec);
byte[] decryptRaw = key.getBytes("ASCII");
SecretKeySpec decryptsKeySpec = new SecretKeySpec(decryptRaw, "AES");
decrypt = Cipher.getInstance("AES");
decrypt.init(Cipher.DECRYPT_MODE, decryptsKeySpec);
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
/**
* 加密
* @param ssrc 需加密的字符串
* @return
*/
public String encryptString(String ssrc) {
try {
byte[] encrypted = encrypt.doFinal(ssrc.getBytes("utf-8"));
return Base64.encodeBase64String(encrypted);
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
/**
* 解密
* @param sSrc 需解密的byte[]数组(针对jmeter的prev.getResponseData()来接参)。
* @return
*/
public String decryptString(byte[] sSrc) {
try {
byte[] original = decrypt.doFinal(sSrc);
return new String(original,"utf-8");
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
}
可以使用下列代码进行调试:
import com.dc.tool.AES;
import org.apache.commons.codec.binary.Base64;
import java.io.UnsupportedEncodingException;
/**
* @author xcj
* @date 2022/4/19 17:18
*/
public class Main {
public static void main(String[] args) throws UnsupportedEncodingException {
AES aes = new AES("0111222333444555");
String s = aes.encryptString("测试22337777777777777777777777");
String s1 = aes.decryptString(Base64.decodeBase64(s));
System.out.println(s);
System.out.println(s1);
}
}
编写完成如上代码后,需进行打jar包操作
1、选择 “Open Module Setting”
2、选择 “Artifacts”进行如下如的配置
3、勾选 “Include in project build”
4、进行 “Build Project”
5、查看是否成功生成 jar
评论区