工具类
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
@Slf4j
public class AESEncryptUtil {
private static final String KEY_ALGORITHM = "AES";
private static final String DEFAULT_CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding";
private static final String DEFAULT_ENCODING = "UTF-8";
public static String encrypt(@NonNull String content, @NonNull String password, @NonNull String iv) {
try {
Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
SecretKeySpec keySpec = new SecretKeySpec(password.getBytes(DEFAULT_ENCODING), KEY_ALGORITHM);
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes(DEFAULT_ENCODING));
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivParameterSpec);
Base64.Encoder encoder = Base64.getEncoder();
byte[] encode = encoder.encode(cipher.doFinal(content.getBytes(DEFAULT_ENCODING)));
return new String(encode);
} catch (Exception ex) {
log.error("AES encrypt error, msg : " + ex.getMessage());
}
return null;
}
public static String decrypt(@NonNull String content, @NonNull String password, @NonNull String iv) {
try {
Base64.Decoder decoder = Base64.getDecoder();
byte[] byteContent = decoder.decode(content);
Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
SecretKeySpec keySpec = new SecretKeySpec(password.getBytes(DEFAULT_ENCODING), KEY_ALGORITHM);
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes(DEFAULT_ENCODING));
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivParameterSpec);
byte[] result = cipher.doFinal(byteContent);
return new String(result, DEFAULT_ENCODING);
} catch (Exception ex) {
log.error("AES decrypt error, msg : " + ex.getMessage());
}
return null;
}
}
测试
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
@Slf4j
public class AESEncryptUtilTest {
@Test
public void passwordTest() {
String encrypt = AESEncryptUtil.encrypt("123456@", "0000000000000000", "0000000000000000");
System.out.println("Encrypt code is " + encrypt);
String content = AESEncryptUtil.decrypt(encrypt, "0000000000000000", "0000000000000000");
System.out.println("Decrypt code is " + content);
}
}