AES加密解密工具类

1import org.slf4j.Logger; 2import org.slf4j.LoggerFactory; 3 4import javax.crypto.Cipher; 5import javax.crypto.spec.IvParameterSpec; 6import javax.crypto.spec.SecretKeySpec; 7import java.util.Base64; 8 9/** 10 * <p> 11 * AES加密解密工具类 12 * 概述:AES高级加密标准,是对称密钥加密中最流行的算法之一; 13 * 工作模式包括:ECB、CBC、CTR、OFB、CFB; 14 * 使用范围:该工具类仅支持CBC模式下的: 15 * 填充:PKCS5Padding 16 * 数据块:128位 17 * 密码(key):32字节长度(例如:12345678901234567890123456789012) 18 * 偏移量(iv):16字节长度(例如:1234567890123456) 19 * 输出:base64 20 * 字符集:UTF-8 21 * 使用方式:String encrypt = AESUtil.encrypt("encData"); 22 * String decrypt = AESUtil.decrypt("decData"); 23 * 返回值为空,需要抛出异常 24 * </p> 25 * 26 * @author 张辉 27 * @since 2019-01-03 28 */ 29public class AESUtil { 30 31 private static final Logger logger = LoggerFactory.getLogger(AESUtil.class); 32 33 /** 34 * 字符集 35 */ 36 private static final String UTF8 = "UTF-8"; 37 38 /** 39 * 指定加密的算法、工作模式和填充方式 40 */ 41 private static final String AES_CBC = "AES/CBC/PKCS5Padding"; 42 43 /** 44 * 加密模式 45 */ 46 private static final String AES = "AES"; 47 /** 48 * 密钥(32位以内) 49 */ 50 public static final String SKEY = "123456"; 51 /** 52 * 偏移向量(必须固定16位) 53 */ 54 public static final String IVPARAMETER = "123456789012345"; 55 56 /** 57 * 加密 58 * @param encData 加密数据 59 * @return 加密后的字符串 60 */ 61 public static String encrypt(String encData) { 62 return encrypt(encData, SKEY, IVPARAMETER); 63 } 64 65 /** 66 * 加密 67 * @param encData 加密数据 68 * @param aesKey 密钥 69 * @param aesIv 偏移向量 70 * @return 加密后的字符串 71 */ 72 public static String encrypt(String encData, String aesKey, String aesIv) { 73 try { 74 byte[] raw = aesKey.getBytes(); 75 SecretKeySpec skeySpec = new SecretKeySpec(raw, AES); 76 IvParameterSpec iv = new IvParameterSpec(aesIv.getBytes()); 77 // 创建密码器 78 Cipher cipher = Cipher.getInstance(AES_CBC); 79 // 初始化为加密模式的密码器 80 cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv); 81 // 加密 82 byte[] encrypted = cipher.doFinal(encData.getBytes(UTF8)); 83 // 使用base64做转码 84 return Base64.getEncoder().encodeToString(encrypted); 85 } catch (Exception e) { 86 logger.error("AES加密异常,encData:{}", encData, e); 87 return null; 88 } 89 } 90 91 /** 92 * 解密 93 * @param decData 解密数据 94 * @return 解密后的字符串 95 */ 96 public static String decrypt(String decData) { 97 return decrypt(decData, SKEY, IVPARAMETER); 98 } 99 100 /** 101 * 解密 102 * @param decData 解密数据 103 * @param aesKey 密钥 104 * @param aesIv 偏移向量 105 * @return 解密后的字符串 106 */ 107 public static String decrypt(String decData, String aesKey, String aesIv) { 108 try { 109 byte[] raw = aesKey.getBytes(); 110 SecretKeySpec skeySpec = new SecretKeySpec(raw, AES); 111 IvParameterSpec iv = new IvParameterSpec(aesIv.getBytes()); 112 // 实例化密码器 113 Cipher cipher = Cipher.getInstance(AES_CBC); 114 // 使用密钥初始化,设置为解密模式 115 cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv); 116 // 解密 117 byte[] original = cipher.doFinal(Base64.getDecoder().decode(decData)); 118 String originalString = new String(original, UTF8); 119 return originalString; 120 } catch (Exception e) { 121 logger.error("AES解密异常,decData:{}", decData, e); 122 return null; 123 } 124 } 125 126}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )