package io.gisbi.utils; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.StringUtils; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import static java.nio.charset.StandardCharsets.UTF_8; public class AesUtils { public static String aesDecrypt(String src, String secretKey, String iv) { if (StringUtils.isBlank(secretKey)) { throw new RuntimeException("secretKey is empty"); } try { byte[] raw = secretKey.getBytes(UTF_8); SecretKeySpec secretKeySpec = new SecretKeySpec(raw, "AES"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); IvParameterSpec iv1 = new IvParameterSpec(iv.getBytes()); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, iv1); byte[] encrypted1 = Base64.decodeBase64(src); byte[] original = cipher.doFinal(encrypted1); return new String(original, UTF_8); } catch (BadPaddingException | IllegalBlockSizeException e) { // 解密的原字符串为非加密字符串,则直接返回原字符串 return src; } catch (Exception e) { throw new RuntimeException("decrypt error,please check parameters", e); } } public static String aesEncrypt(String src, String secretKey, String iv) { if (StringUtils.isBlank(secretKey)) { throw new RuntimeException("secretKey is empty"); } try { byte[] raw = secretKey.getBytes(UTF_8); SecretKeySpec secretKeySpec = new SecretKeySpec(raw, "AES"); // "算法/模式/补码方式" ECB Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); IvParameterSpec iv1 = new IvParameterSpec(iv.getBytes()); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, iv1); byte[] encrypted = cipher.doFinal(src.getBytes(UTF_8)); return Base64.encodeBase64String(encrypted); } catch (Exception e) { throw new RuntimeException("AES encrypt error:", e); } } public static Object aesEncrypt(Object o) { return o == null ? null : aesEncrypt(o.toString(), "www.fit2cloud.co", "1234567890123456"); } public static Object aesDecrypt(Object o) { return o == null ? null : aesDecrypt(o.toString(), "www.fit2cloud.co", "1234567890123456"); } }