• 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);
    	}
    
    }
    
  • 相关阅读:
    获取MySQL各版本yum源 并安装
    CentOS 防火墙实用操作
    简单3步将你的python转成exe格式
    java 实现扑克牌打印
    java 一维数组的总结笔记
    java中如何理解:其他类型 + string 与 自增类型转换和赋值类型转换
    c语言 0与非0
    Python中nonlocal的用法
    Python基础系列讲解-自动控制windows桌面
    flask_caching 缓存
  • 原文地址:https://www.cnblogs.com/crazytrip/p/16401308.html
Copyright © 2020-2023  润新知