1. 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称 Rijndael 加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的 DES,已经被多方分析且广为全世界所使用。简单说就是 DES 的增强版,比 DES 的加密强度更高。<br />AES DES 一样,一共有四种加密模式:电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)。关于加密模式的介绍,推荐这篇文章:[高级加密标准AES的工作模式(ECBCBCCFBOFB)](https://links.jianshu.com/go?to=https%3A%2F%2Fblog.poxiao.me%2Fp%2Fadvanced-encryption-standard-and-block-cipher-mode%2F)<br />示例代码:
    1. import javax.crypto.Cipher;
    2. import javax.crypto.spec.IvParameterSpec;
    3. import javax.crypto.spec.SecretKeySpec;
    4. public class AESUtil {
    5. public static final String algorithm = "AES";
    6. // AES/CBC/NOPaddin
    7. // AES 默认模式
    8. // 使用CBC模式, 在初始化Cipher对象时, 需要增加参数, 初始化向量IV : IvParameterSpec iv = new
    9. // IvParameterSpec(key.getBytes());
    10. // NOPadding: 使用NOPadding模式时, 原文长度必须是8byte的整数倍
    11. public static final String transformation = "AES/CBC/NOPadding";
    12. public static final String key = "1234567812345678";
    13. /***
    14. * 加密
    15. * @param original 需要加密的参数(注意必须是16位)
    16. * @return
    17. * @throws Exception
    18. */
    19. public static String encryptByAES(String original) throws Exception {
    20. // 获取Cipher
    21. Cipher cipher = Cipher.getInstance(transformation);
    22. // 生成密钥
    23. SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), algorithm);
    24. // 指定模式(加密)和密钥
    25. // 创建初始化向量
    26. IvParameterSpec iv = new IvParameterSpec(key.getBytes());
    27. cipher.init(Cipher.ENCRYPT_MODE, keySpec, iv);
    28. // cipher.init(Cipher.ENCRYPT_MODE, keySpec);
    29. // 加密
    30. byte[] bytes = cipher.doFinal(original.getBytes());
    31. return Base64Util.encryptBASE64(bytes);
    32. }
    33. /**
    34. * 解密
    35. * @param encrypted 需要解密的参数
    36. * @return
    37. * @throws Exception
    38. */
    39. public static String decryptByAES(String encrypted) throws Exception {
    40. // 获取Cipher
    41. Cipher cipher = Cipher.getInstance(transformation);
    42. // 生成密钥
    43. SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), algorithm);
    44. // 指定模式(解密)和密钥
    45. // 创建初始化向量
    46. IvParameterSpec iv = new IvParameterSpec(key.getBytes());
    47. cipher.init(Cipher.DECRYPT_MODE, keySpec, iv);
    48. // cipher.init(Cipher.DECRYPT_MODE, keySpec);
    49. // 解密
    50. byte[] bytes = cipher.doFinal(Base64Util.decryBASE64(encrypted));
    51. return new String(bytes);
    52. }
    53. }