该方法无需引用外部jar包。
一、AES加密组成:
1、加密模式:ECB、CBC、CTR、CFB、OFB
2、补充方式:PKCS5Padding、PKCS7Padding、AnsiX923、ISO10126、ZeroPadding
3、密钥长度:128、192或256位,例如密钥长度为128位,一个字节8位,128/8=16字节, 即密钥为16个字节。
二、在jmeter中添加前置处理器JSR223 PreProcessor。 语言选择:beanshell 或 Java
三、代码如下
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
/** 加密方法 */
private static final String SECRET_AES = "AES";
/** 加密实例 */ //"算法/模式/补码方式"
private static final String SECRET_AES_INSTANCE = "AES/ECB/PKCS5Padding";
/** 16进制 参数数组 */
private static final char[] HEX_CHARS = "0123456789ABCDEF".toCharArray();
/**
* AES 加密
*
* @param plainText 明文
* @param password 密码
* @return 密文
*/
public static String encrypt(String plainText, String password) {
if (plainText == null || password == null) {
throw new InvalidParameterException("invalid parameters");
}
try {
SecretKeySpec key = new SecretKeySpec(password.getBytes(), SECRET_AES);
Cipher cipher = Cipher.getInstance(SECRET_AES_INSTANCE);// 创建密码器
cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
byte[] out = cipher.doFinal(plainText.getBytes());// 二进制加密
return byte2hex(out); //调用 “byte2hex”方法,返回16进制加密密文
} catch (Exception e) {
throw new IllegalStateException("aes encrypt failed", e);
}
}
//转16 进制
public static String byte2hex(byte[] bytes) {
if (bytes == null) {
return null;
}
StringBuilder sb = new StringBuilder();
for (byte value : bytes) {
int v = value & 0xff;
sb.append(HEX_CHARS[v / 0x10]).append(HEX_CHARS[v % 0x10]);
}
return sb.toString();
}
/* Key:加密的秘钥,key必须16位*/
String Key = "1234567812345678";
String id = "123&abc";
String enc = encrypt(id,Key);
vars.put("id",enc);
log.info("id= "+enc);
四、加密结果
五、加密结果验证
1、验证地址:AES在线加密解密工具 - MKLab在线工具