aes 对称加密算法,通过解密密文,可以得到被加密的数据!
本代码是运行在jmeter的 beanshell中的,你也可以封装成类,编译成jar包,供jmeter调用,都是可以的
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public static String Encrypt(String sSrc, String sKey) throws Exception {
if (sKey == null) {
return null;
}
// 判断Key是否为16位
if (sKey.length() != 16) {
return null;
}
byte[] encryptRaw = sKey.getBytes("ASCII");
SecretKeySpec encryptsKeySpec = new SecretKeySpec(encryptRaw, "AES");
Cipher encrypt = Cipher.getInstance("AES");
encrypt.init(Cipher.ENCRYPT_MODE, encryptsKeySpec);
byte[] encrypted = encrypt.doFinal(sSrc.getBytes("ASCII"));
return Base64.encodeBase64String(encrypted);// 此处使用BASE64做转码功能,同时能起到2次加密的作用。
}
String cSrc = "{\"common\":{\"client\":{\"buildNo\":\"BuildNo\",\"language\":\"Language\",\"os\":\"Os\",\"sdkType\":\"SdkType\",\"version\":\"Version\"},\"deviceId\":\"DeviceId\",\"packageName\":\"com.lanyue.cloudgame\",\"platform\":\"Platform\"},\"preOrderParam\":{\"cpOrderId\":\"CpOrderId\",\"currencyLimit\":true,\"goodDesc\":\"gooddesc\",\"goodName\":\"goodname\",\"money\":1,\"roleId\":\"0\",\"roleName\":\"roleName\",\"serverId\":\"ServerId\",\"serverName\":\"servername\"}}";
//密码,长度要是8的倍数
String cKey = "088c80bf980469c3";
// 需要加密的字串
System.out.println(cSrc);
// 加密
String enString = Encrypt(cSrc, cKey);
vars.put("enString",enString);
return enString;
以上代码再运用aes加密之后,又对结果进行了base64 编码,这样就便于查看和传输了,aes的直接加密结果是字节集,强行转换成字符串的话,肯定是一串乱码~!
结果