import java.io.UnsupportedEncodingException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
import java.util.UUID;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
public class AesUtil {
private final static String AES = "AES";
private final static String UTF8 = "UTF-8";
//定义一个16byte的初始向量
private static final String IV_STRING = "12345678abcdefgh";
/**
* 产生一个16位的密钥字符串
* [@return](https://my.oschina.net/u/556800)
*/
public static String generateSecreKey() {
String uuid = UUID.randomUUID().toString();
uuid = uuid.replaceAll("-", "");
return uuid.substring(0, 16);
}
public static String aesEncry(String content,String key) throws UnsupportedEncodingException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, InvalidAlgorithmParameterException {
byte[] contentByte = content.getBytes(UTF8);
byte[] keyByte = key.getBytes();
//初始化一个密钥对象
SecretKeySpec keySpec = new SecretKeySpec(keyByte ,AES);
//初始化一个初始向量,不传入的话,则默认用全0的初始向量
byte[] initParam = IV_STRING.getBytes();
IvParameterSpec ivSpec = new IvParameterSpec(initParam);
// 指定加密的算法、工作模式和填充方式
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, keySpec,ivSpec);
byte[] encryptedBytes = cipher.doFinal(contentByte);
String encodedString = Base64.getEncoder().encodeToString(encryptedBytes);
return encodedString;
}
public static String aesDecry(String content,String key) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException, InvalidAlgorithmParameterException {
byte[] contentByte = Base64.getDecoder().decode(content);
byte[] keyByte = key.getBytes();
//初始化一个密钥对象
SecretKeySpec keySpec = new SecretKeySpec(keyByte ,AES);
//初始化一个初始向量,不传入的话,则默认用全0的初始向量
byte[] initParam = IV_STRING.getBytes();
IvParameterSpec ivSpec = new IvParameterSpec(initParam);
// 指定加密的算法、工作模式和填充方式
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, keySpec,ivSpec);
byte[] result = cipher.doFinal(contentByte);
return new String(result,UTF8);
}
}
Java-AES加密解密
未经允许不得转载:搜云库技术团队 » Java-AES加密解密
相关推荐
- 第二版:互联网大厂面试题,92份 PDF,累计 3625 页!
- 蘑菇街、滴滴、淘宝、微信的组件化架构解析,附Demo和PDF
- Mybatis源码分析 - 九种设计模式总结
- MySQl性能优化,MySQl索引优化,MySQl执行计划使用实战经历
- 如何设计网址短链接生成服务,网址缩短服务,短URL生成服务
- Nginx实现负载均衡配置,分发策略
- JVM最多支持多少个线程?如何计算JVM线程数?
- 程序该如何优化?怎么做性能优化?性能优化的原则?
- SpringBoot Jar 可执行原理,源码分析SpringBoot Jar启动
- 为什么要读源码,如何阅读源码,Spring源码如何读,业务源代码如何读
- StringBuilder为什么线程不安全,StringBuilder源码分析
- JDK8 Stream 数据流效率分析,JDK8 Stream 性能如何
- 如何计算并发用户数,PV计算公式,TPS估计
- Tomcat性能调优,JVM的性能调优,总结文档
- 生产上MySQL慢查询优化实战,SQL优化实战
- SpringBoot 中 logback日志配置使用