自定義的一個對稱加密工具類AESUtil.java
public static final String ENCRYPTION_ALGORITHM = "AES"; public static final String CIPHER_PARAM = "AES/CBC/PKCS5Padding"; private static final String DEFAULT_KEY_AND_IV = "1234567890ABCDEF";//帶偏移量的密鑰和偏移量似乎是固定16位長度的 private static AESUtil instance = null; /** 偏移量 **/ private static IvParameterSpec iv; /** 密鑰 **/ private static SecretKeySpec key; /** * @Title: getInstance * @Description: 單例AES加密工具,使用默認的密鑰以及偏移量 * @return AESUtil * @author hanzhiyong * @date 2019-4-26下午4:51:12 */ public static AESUtil getInstance() { if (instance == null) { instance = new AESUtil(DEFAULT_KEY_AND_IV); } return instance; } /** * @Title:AESUtil * @Description:自定義偏移量構造AES加密工具,使用默認的KEY * @param ivParameter 原始偏移量字符串 */ public AESUtil(String ivParameter) { iv = new IvParameterSpec(ivParameter.getBytes()); key = new SecretKeySpec(DEFAULT_KEY_AND_IV.getBytes(), ENCRYPTION_ALGORITHM); } /** * @Title:AESUtil * @Description:自定義偏移量和密鑰構造AES加密工具 * @param secretKey 原始密鑰字符串 * @param ivParameter 原始偏移量字符串 */ public AESUtil(String secretKey, String ivParameter) { iv = new IvParameterSpec(ivParameter.getBytes()); key = new SecretKeySpec(secretKey.getBytes(), ENCRYPTION_ALGORITHM); } /** * 取得密鑰 * * @throws Exception */ public static String getKey() { Base64 base64 = new Base64(); System.out.println("密鑰String:" + new String(key.getEncoded())); return base64.encodeToString(key.getEncoded()); } /** * 取得偏移量 */ public static String getIv() throws Exception { Base64 base64 = new Base64(); System.out.println("偏移量String:" + new String(iv.getIV())); return base64.encodeToString(iv.getIV()); } /** * @Title: encrypt * @Description: AES加密 * @param enString 用來加密的明文 * @throws Exception * @return String 加密后密文 * @author hanzhiyong * @date 2019-4-26下午3:57:17 */ public String encrypt(String enString) throws Exception { Base64 base64 = new Base64(); Cipher cipher = Cipher.getInstance(CIPHER_PARAM); cipher.init(Cipher.ENCRYPT_MODE, key, iv); byte[] encrypted = cipher.doFinal(enString.getBytes("utf-8")); return base64.encodeToString(encrypted); } /** * @Title: decrypt * @Description: AES解密 * @param deString 用來解密的密文 * @throws Exception * @return String 解密后的明文 * @author hanzhiyong * @date 2019-4-26下午3:58:06 */ public String decrypt(String deString) throws Exception { try { Base64 base64 = new Base64(); Cipher cipher = Cipher.getInstance(CIPHER_PARAM); cipher.init(Cipher.DECRYPT_MODE, key, iv); byte[] decrypted = base64.decode(deString); byte[] original = cipher.doFinal(decrypted); return new String(original, "utf-8"); } catch (Exception ex) { return null; } } /** * @Title: main * @Description: 加密解密測試用例 * @param args * @throws Exception * @return void * @author hanzhiyong * @date 2019-4-23下午6:41:16 */ @Deprecated public static void main(String args[]) throws Exception { String sourceString = "測試用來加密的數據"; System.out.println("sourceString加密前: " + sourceString); System.out.println("=========================單例的加密工具========================="); System.out.println("base64加密后密鑰:" + AESUtil.getInstance().getKey()); System.out.println("base64加密后偏移量:" + AESUtil.getInstance().getIv()); System.out.println("加密后sourceString: " + AESUtil.getInstance().encrypt(sourceString)); System.out.println("解密后sourceString: " + AESUtil.getInstance().decrypt(AESUtil.getInstance().encrypt(sourceString))); AESUtil aesUtil = new AESUtil("0123456789111111"); System.out.println("=========================自定義偏移量的工具========================="); System.out.println("base64加密后密鑰:" + aesUtil.getKey()); System.out.println("base64加密后偏移量:" + aesUtil.getIv()); System.out.println("加密后sourceString: " + aesUtil.encrypt(sourceString)); System.out.println("解密后sourceString: " + aesUtil.decrypt(aesUtil.encrypt(sourceString))); }