import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
/**
* Created by xwqaa on 2016/4/8.
* Android和java两平台AES的互相加密解密
*/
public class AES {
static final String algorithmStr = "AES/ECB/PKCS5Padding";
private static final Object TAG = "AES";
static private KeyGenerator keyGen;
static private Cipher cipher;
static boolean isInited = false;
//注意: 这里的password(秘钥必须是16位的)
private static final String keyBytes = "abcdefgabcdefg12";
private static void init() {
try {
/**为指定算法生成一个 KeyGenerator 对象。
*此类提供(对称)密钥生成器的功能。
*密钥生成器是使用此类的某个 getInstance 类方法构造的。
*KeyGenerator 对象可重复使用,也就是说,在生成密钥后,
*可以重复使用同一 KeyGenerator 对象来生成进一步的密钥。
*生成密钥的方式有两种:与算法无关的方式,以及特定于算法的方式。
*两者之间的惟一不同是对象的初始化:
*与算法无关的初始化
*所有密钥生成器都具有密钥长度 和随机源 的概念。
*此 KeyGenerator 类中有一个 init 方法,它可采用这两个通用概念的参数。
*还有一个只带 keysize 参数的 init 方法,
*它使用具有最高优先级的提供程序的 SecureRandom 实现作为随机源
*(如果安装的提供程序都不提供 SecureRandom 实现,则使用系统提供的随机源)。
*此 KeyGenerator 类还提供一个只带随机源参数的 inti 方法。
*因为调用上述与算法无关的 init 方法时未指定其他参数,
*所以由提供程序决定如何处理将与每个密钥相关的特定于算法的参数(如果有)。
*特定于算法的初始化
*在已经存