工具類代碼:
package com.test.commons.utils;
import java.security.Key;
import java.security.SecureRandom;
import java.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
/**
* @desc: AES對稱加密,對明文進行加密、解密處理
* @author: yong.li
* @createTime: 2018年8月28日 上午9:54:52
* @version: v0.0.1
*/
public class AesUtils {
private static final String KEY_ALGORITHM = "AES";
private static final String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";
/**
* @desc: AES對稱-加密操作
* @author: yong.li
* @createTime: 2018年8月28日 上午10:25:50
* @version: v0.0.1
* @param keyStr 進行了Base64編碼的祕鑰
* @param data 需要進行加密的原文
* @return String 數據密文,加密後的數據,進行了Base64的編碼
*/
public static String encrypt(String keyStr, String data) throws Exception {
// 轉換密鑰
Key key = new SecretKeySpec(Base64.getDecoder().decode(keyStr), KEY_ALGORITHM);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
// 加密
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] result = cipher.doFinal(data.getBytes());
return Base64.getEncoder().encodeToString(result);
}
/**
* @desc: AES對稱-解密操作
* @author: yong.li
* @createTime: 2018年8月28日 上午10:22:47
* @version: v0.0.1
* @param keyStr 進行了Base64編碼的祕鑰
* @param data 需要解密的數據<span style="color:red;">(數據必須是通過AES進行加密後,對加密數據Base64編碼的數據)</span>
* @return String 返回解密後的原文
*/
public static String decrypt(String keyStr, String data) throws Exception {
// 轉換密鑰
Key key = new SecretKeySpec(Base64.getDecoder().decode(keyStr), KEY_ALGORITHM);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
// 解密
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] result = cipher.doFinal(Base64.getDecoder().decode(data));
return new String(result);
}
public static void main(String[] args) throws Exception {
System.out.println(keyGenerate());
}
/**
* @desc: 生成AES的祕鑰,祕鑰進行了Base64編碼的字符串
* @author: yong.li
* @createTime: 2018年8月28日 上午10:24:32
* @version: v0.0.1
* @return String 對生成的祕鑰進行了Base64編碼的字符串
*/
public static String keyGenerate() throws Exception {
// 生成密鑰
KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_ALGORITHM);
keyGenerator.init(new SecureRandom());
SecretKey secretKey = keyGenerator.generateKey();
byte[] keyBytes = secretKey.getEncoded();
return Base64.getEncoder().encodeToString(keyBytes);
}
}
說明:
該工具類提供了簡單的生成祕鑰、加密、解密操作
第一步: 使用方法靜態方法keyGenerate生成祕鑰,AES爲對稱加密,即:加密、解密都需要使用同一個祕鑰
第二步: 使用靜態方法encrypt(祕鑰, 原文),工具方法將對原文進行加密,對加密後的數據進行Base64編碼
第三方: 使用靜態方法decrypt(祕鑰, 密文),密文是加密方法加密後進行了Base64編碼的數據