javaはPKCS 5 Padding充填方式に基づくAESの復号を実現する。


第3弾を復号し、javaはPKCS 5 Padding充填方式によるAESの復号を実現する。インターネットの共有精神に基づいて、わざわざコードをお送りします。多く言わないで、コードを見て、兄の注釈はとても詳しいです。
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

import org.apache.commons.codec.binary.Base64;


public class AESUtil {
	
	/**
	 *     
	 */
	private static final String KEY_ALGORITHM = "AES";
	
	/**
	 *   /     /      /     
	 * Java 6  PKCS5Padding    
	 * Bouncy Castle  PKCS7Padding    
	 */
	private static final String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";
	
	/**
	 *     
	 * @return	  
	 * @throws Exception
	 */
	public static String generateKey() throws Exception {
		//        
		KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM);
		/**
		 *   AES    
		 * AES       128  192  256 ,java    AES      128 
		 *   192  256 ,    oracle         jdk   , "Additional Resources"   
		 * "Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files",  [DOWNLOAD]  
		 *      local_policy.jar US_export_policy.jar  jdk      jre/lib/security/   ,           
		 */
		kg.init(128);
		//    
		SecretKey secretKey = kg.generateKey();
		//          
		return Base64.encodeBase64String(secretKey.getEncoded());
	}
	
	/**
	 * AES  
	 * @param source	    
	 * @param key	  
	 * @return	      
	 * @throws Exception
	 */
	public static String encrypt(String source, String key) throws Exception {
		byte[] sourceBytes = source.getBytes("UTF-8");
        byte[] keyBytes = Base64.decodeBase64(key);
        Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);  
        cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(keyBytes, KEY_ALGORITHM));  
        byte[] decrypted = cipher.doFinal(sourceBytes);
        return Base64.encodeBase64String(decrypted);
	}
	
	/**
	 * AES  
	 * @param encryptStr	      
	 * @param key	  
	 * @return	    
	 * @throws Exception
	 */
	public static String decrypt(String encryptStr, String key) throws Exception {
		byte[] sourceBytes = Base64.decodeBase64(encryptStr);
    	byte[] keyBytes = Base64.decodeBase64(key);
        Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);  
        cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(keyBytes, KEY_ALGORITHM));  
        byte[] decoded = cipher.doFinal(sourceBytes);  
        return new String(decoded, "UTF-8");
	}
	
}