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);
	}

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章