package com.mandi.common; import java.io.UnsupportedEncodingException; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.KeyGenerator; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; public class AESMethod { public static String encryptPKCS7ForBase64(String pwd,String source,byte[] IV){ if(source==null||pwd==null) return null; try { KeyGenerator keygen=KeyGenerator.getInstance("AES"); SecureRandom sr=SecureRandom.getInstance("SHA1PRNG"); sr.setSeed(pwd.getBytes()); keygen.init(128,sr); SecretKey key=keygen.generateKey(); byte[] keyendoce=key.getEncoded(); SecretKeySpec keyspec=new SecretKeySpec(keyendoce, "AES"); Cipher cipher=Cipher.getInstance("AES/CBC/PKCS5Padding"); try { cipher.init(Cipher.ENCRYPT_MODE,keyspec,new IvParameterSpec(IV)); byte[] sbytes=null; sbytes = cipher.doFinal(source.getBytes("utf8")); return Base64.encodeBase64String(sbytes) ;//byte2hexStr(sbytes); //这里也可以用base64来表示,这样解密的时候反解析base64 } catch (UnsupportedEncodingException e) { System.out.println("加密过程中,getbyte有错误!"); e.printStackTrace(); } catch (InvalidAlgorithmParameterException e) { e.printStackTrace(); } } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } return ""; } public static String decryptPKCS7ForBase64(String pwd,String source,byte[] IV){ if(source==null||pwd==null) return ""; byte[] sbytes=Base64.decodeBase64(source);//hexStr2bytes(source); try { KeyGenerator keygen=KeyGenerator.getInstance("AES"); SecureRandom sr=SecureRandom.getInstance("SHA1PRNG"); sr.setSeed(pwd.getBytes()); keygen.init(128,sr); SecretKey key=keygen.generateKey(); byte[] keyendoce=key.getEncoded(); SecretKeySpec keyspec=new SecretKeySpec(keyendoce, "AES"); Cipher cipher=Cipher.getInstance("AES/CBC/PKCS5Padding"); try { cipher.init(Cipher.DECRYPT_MODE, keyspec,new IvParameterSpec(IV)); byte[] dbytes=cipher.doFinal(sbytes); return new String(dbytes,"utf8"); } catch (UnsupportedEncodingException e) { System.out.println("解密过程中,编码错误!"); e.printStackTrace(); } catch (InvalidAlgorithmParameterException e) { e.printStackTrace(); } } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } return ""; } public static String encryptPKCS7ForBase64(byte[] pwd,String source,byte[] IV){ if(source==null||pwd==null) return null; try { KeyGenerator keygen=KeyGenerator.getInstance("AES"); SecureRandom sr=SecureRandom.getInstance("SHA1PRNG"); sr.setSeed(pwd); keygen.init(128,sr); SecretKey key=keygen.generateKey(); byte[] keyendoce=key.getEncoded(); SecretKeySpec keyspec=new SecretKeySpec(keyendoce, "AES"); Cipher cipher=Cipher.getInstance("AES/CBC/PKCS5Padding"); try { cipher.init(Cipher.ENCRYPT_MODE,keyspec,new IvParameterSpec(IV)); byte[] sbytes=null; sbytes = cipher.doFinal(source.getBytes("utf8")); return Base64.encodeBase64String(sbytes);//byte2hexStr(sbytes); //这里也可以用base64来表示,这样解密的时候反解析base64 } catch (UnsupportedEncodingException e) { System.out.println("加密过程中,getbyte有错误!"); e.printStackTrace(); } catch (InvalidAlgorithmParameterException e) { e.printStackTrace(); } } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } return ""; } public static String decryptPKCS7ForBase64(byte[] pwd,String source,byte[] IV){ if(source==null||pwd==null) return ""; byte[] sbytes=Base64.decodeBase64(source);//hexStr2bytes(source); try { KeyGenerator keygen=KeyGenerator.getInstance("AES"); SecureRandom sr=SecureRandom.getInstance("SHA1PRNG"); sr.setSeed(pwd); keygen.init(128,sr); SecretKey key=keygen.generateKey(); byte[] keyendoce=key.getEncoded(); SecretKeySpec keyspec=new SecretKeySpec(keyendoce, "AES"); Cipher cipher=Cipher.getInstance("AES/CBC/PKCS5Padding"); try { cipher.init(Cipher.DECRYPT_MODE, keyspec,new IvParameterSpec(IV)); byte[] dbytes=cipher.doFinal(sbytes); return new String(dbytes,"utf8"); } catch (UnsupportedEncodingException e) { System.out.println("解密过程中,编码错误!"); e.printStackTrace(); } catch (InvalidAlgorithmParameterException e) { e.printStackTrace(); } } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } return ""; } }