Java 对称加密解密(hutool)
Java 对称加密解密(hutool)
借助hutool工具包,使用对称加密;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.AES;
import cn.hutool.crypto.symmetric.SymmetricAlgorithm;
import org.junit.Assert;
import org.junit.Test;
import sun.misc.BASE64Encoder;
import javax.crypto.SecretKey;
import javax.persistence.Access;
import java.util.Base64;
/**
* @desc: hutool 工具类测试
* @author: Linwei
* @created: 2022-06-22 13:24:25
*
* 对称加密: (加密解密必须使用相同的key)
* * AES 模式key必须是128位字节或者192,256(使用hutool必须只能是128)
*
*/
public class HutoolTest {
// hutool 官网加解密样例
@Test
public void testAES(){
String content = "test中文";
//随机生成密钥
byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();
System.out.println(key.length); // 16
String keyStr = StrUtil.str(key, CharsetUtil.CHARSET_UTF_8);
System.out.println(keyStr); // 打印的是一堆乱码
// 使用base64加密一下,转成正常的字符串
String baseKey = Base64.getEncoder().encodeToString(key);
System.out.println("-->秘钥: "+baseKey); // 打印的是16进制字符串
// 使用上面生成的随机秘钥key加密
byte[] encrypt = SecureUtil.aes(key).encrypt(content);
String encryptStr = Base64.getEncoder().encodeToString(encrypt);
System.out.println("-->加密后字符串: "+encryptStr);
// 使用BASE64加密后的字符串密钥key解密
byte[] decode = Base64.getDecoder().decode(baseKey);
String decryptStr = SecureUtil.aes(decode).decryptStr(encryptStr);
System.out.println("-->解密后字符串: "+ decryptStr);
}
// 简单封装一下,简化加解密
@Test
public void testMyAes(){
String key = MySecureUtil.generateAesKey();
System.out.println("-->随机密钥: "+key);
String content = "hello, 这是第一段文本;";
String encrypt = MySecureUtil.aesEncrypt(key, content);
System.out.println("-->加密后: "+encrypt);
String decrypt = MySecureUtil.aesDecrypt(key, encrypt);
System.out.println("-->解密后: "+decrypt);
Assert.assertEquals(content,decrypt);
}
}
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.SymmetricAlgorithm;
import org.apache.commons.lang3.StringUtils;
import java.util.Base64;
/**
* @desc: 借助hutool工具 整合加解密工具
* @author: Linwei
* @created: 2022-06-22 14:26:00
*/
public class MySecureUtil {
/**
* @author: Linwei
* @created: 2022/6/22 14:27
* @desc: 返回AES算法使用的随机密钥key
* @return Base64格式的key
*/
public static String generateAesKey(){
byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();
return Base64.getEncoder().encodeToString(key);
}
/**
* @author: Linwei
* @created: 2022/6/22 14:34
* @desc:
* @param key base64格式的key
* @param content 待加密文本
* @return 加密后文本
*/
public static String aesEncrypt(String key,String content){
if(StringUtils.isBlank(key) || StringUtils.isBlank(content)){
return "";
}
byte[] decode = Base64.getDecoder().decode(key);
return SecureUtil.aes(decode).encryptBase64(content);
}
/**
* @author: Linwei
* @created: 2022/6/22 14:40
* @desc:
* @param key
* @param content
* @return 解密后文本
*/
public static String aesDecrypt(String key,String content){
if(StringUtils.isBlank(key) || StringUtils.isBlank(content)){
return "";
}
byte[] decode = Base64.getDecoder().decode(key);
return SecureUtil.aes(decode).decryptStr(content);
}
}
边系鞋带边思考人生.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示