package com.dsh.guns.modular.system.util;
|
|
import javax.crypto.Cipher;
|
import javax.crypto.spec.IvParameterSpec;
|
import javax.crypto.spec.SecretKeySpec;
|
import java.security.Key;
|
import java.security.spec.AlgorithmParameterSpec;
|
import java.util.Base64;
|
|
public class AESUtils {
|
private static final String TRANSFORMATION = "AES/CBC/PKCS5Padding";
|
private static final String ALGORITHM = "AES";
|
private static final String CHARSET = "utf-8";
|
/**
|
* 建议为16位或32位
|
*/
|
private static final String KEY = "c53fd327353a09a1";
|
/**
|
* 必须16位
|
* 初始化向量IV不可以为32位,否则异常java.security.InvalidAlgorithmParameterException: Wrong IV length: must be 16 bytes long
|
*/
|
private static final String IV = "3a0565e3b1d8ae3d";
|
|
/**
|
* 加密
|
*
|
* @param context
|
* @return
|
*/
|
public static String encrypt(String context) {
|
try {
|
byte[] decode = context.getBytes(CHARSET);
|
byte[] bytes = createKeyAndIv(decode, Cipher.ENCRYPT_MODE);
|
return Base64.getEncoder().encodeToString(bytes);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
/**
|
* 解密
|
*
|
* @param context
|
* @return
|
*/
|
public static String decrypt(String context) {
|
try {
|
Base64.Decoder decoder = Base64.getDecoder();
|
byte[] decode = decoder.decode(context);
|
byte[] bytes = createKeyAndIv(decode, Cipher.DECRYPT_MODE);
|
return new String(bytes, CHARSET);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
/**
|
* 获取key & iv
|
*
|
* @param context
|
* @param opmode
|
* @return
|
* @throws Exception
|
*/
|
public static byte[] createKeyAndIv(byte[] context, int opmode) throws Exception {
|
byte[] key = KEY.getBytes(CHARSET);
|
byte[] iv = IV.getBytes(CHARSET);
|
return cipherFilter(context, opmode, key, iv);
|
}
|
|
/**
|
* 执行操作
|
*
|
* @param context
|
* @param opmode
|
* @param key
|
* @param iv
|
* @return
|
* @throws Exception
|
*/
|
public static byte[] cipherFilter(byte[] context, int opmode, byte[] key, byte[] iv) throws Exception {
|
Key secretKeySpec = new SecretKeySpec(key, ALGORITHM);
|
AlgorithmParameterSpec ivParameterSpec = new IvParameterSpec(iv);
|
Cipher cipher = Cipher.getInstance(TRANSFORMATION);
|
cipher.init(opmode, secretKeySpec, ivParameterSpec);
|
return cipher.doFinal(context);
|
}
|
|
|
}
|