AESUtil AES加密工具類
阿新 • • 發佈:2018-12-29
AES加密工具類,其中匯入的jar包jdk引進去就可以用了,jdk的版本儘量大於1.5
package com.g.mavenspring.demo.util; /** * @Title: AESUtil.java * @Package com.g.mavenspring.demo.util * @Description: TODO(用一句話描述該檔案做什麼) * @author * @date 2015年12月29日 下午2:38:00 * @version V1.0 */ import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; public class AESUtil { public static void main(String[] args) { // 金鑰的種子,可以是任何形式,本質是位元組陣列 String strKey = "aaaa"; // 金鑰資料 byte[] rawKey = getRawKey(strKey.getBytes()); // 密碼的明文 String clearPwd = "My world is full of wonders! No body can match my spirit"; // 密碼加密後的密文 byte[] encryptedByteArr = encrypt(rawKey, clearPwd); String encryptedPwd = new String(encryptedByteArr); System.out.println(encryptedPwd); // 解密後的字串 String decryptedPwd = decrypt(encryptedByteArr, rawKey); System.out.println(decryptedPwd); } /** * @param rawKey * 金鑰 * @param clearPwd * 明文字串 * @return 密文位元組陣列 */ private static byte[] encrypt(byte[] rawKey, String clearPwd) { try { SecretKeySpec secretKeySpec = new SecretKeySpec(rawKey, "AES"); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec); byte[] encypted = cipher.doFinal(clearPwd.getBytes()); return encypted; } catch (Exception e) { return null; } } /** * @param encrypted * 密文位元組陣列 * @param rawKey * 金鑰 * @return 解密後的字串 */ private static String decrypt(byte[] encrypted, byte[] rawKey) { try { SecretKeySpec secretKeySpec = new SecretKeySpec(rawKey, "AES"); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec); byte[] decrypted = cipher.doFinal(encrypted); return new String(decrypted); } catch (Exception e) { return ""; } } /** * @param seed種子資料 * @return 金鑰資料 */ private static byte[] getRawKey(byte[] seed) { byte[] rawKey = null; try { KeyGenerator kgen = KeyGenerator.getInstance("AES"); SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG"); secureRandom.setSeed(seed); // AES加密資料塊分組長度必須為128位元,金鑰長度可以是128位元、192位元、256位元中的任意一個 kgen.init(128, secureRandom); SecretKey secretKey = kgen.generateKey(); rawKey = secretKey.getEncoded(); } catch (NoSuchAlgorithmException e) { } return rawKey; } }