importjava.security.SecureRandom;importjava.util.Arrays;importjava.util.Base64;importjava.util.UUID;importjavax.crypto.Cipher;importjavax.crypto.KeyGenerator;importjavax.crypto.SecretKey;importjavax.crypto.spec.IvParameterSpec;importjavax.crypto.spec.SecretKeySpec;public classAesMian {public static void main(String[] args) throwsException{//TODO Auto-generated method stub//AES加密是需要把secretKey和iv都保存好,当然这只是在CBC模式下面
String secretKey = "kuFPnF7Jm7T/X/x8pi0mzg==";
String uuid=UUID.randomUUID().toString();byte[] iv = Arrays.copyOf(uuid.getBytes(), 16);
String data= "aabbccddeeffgg";byte[] miwen =aesEncrypt(data.getBytes(), secretKey, iv);
System.out.println(encryptBASE64(miwen));byte[] mingwen =aesDecrypt(miwen, secretKey, iv);
System.out.println(newString(mingwen));
}//AES加密
private static byte[] aesEncrypt(byte[] data, String secretKey, byte[] iv) throwsException {
Cipher cipher= Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, strToSecretKey(secretKey),newIvParameterSpec(iv));returncipher.doFinal(data);
}//AES解密
private static byte[] aesDecrypt(byte[] data, String secretKey, byte[] iv) throwsException {
Cipher cipher= Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, strToSecretKey(secretKey),newIvParameterSpec(iv));returncipher.doFinal(data);
}//从秘钥字符串转换到secretKey
private staticSecretKey strToSecretKey(String str) {
SecretKey secretKey= new SecretKeySpec(decryptBASE64(str),"AES");returnsecretKey;
}//字节数组到文件字符串
public static String encryptBASE64(byte[] bytes) {returnBase64.getEncoder().encodeToString(bytes);
}//文件字符串到字节数组
public static byte[] decryptBASE64(String str) {returnBase64.getDecoder().decode(str);
}/*下面生成密钥的过程中指定了固定的种子,每次生成出来的密钥都是一样的。
还有一种形式,我们可以通过不指定SecureRandom对象的种子,
即不调用其setSeed方法,这样每次生成出来的密钥都可能是不一样的。*/
public static SecretKey geneKey() throwsException {//获取一个密钥生成器实例
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
SecureRandom random= newSecureRandom();
random.setSeed("123456".getBytes());//设置加密用的种子,密钥
keyGenerator.init(random);
SecretKey secretKey=keyGenerator.generateKey();returnsecretKey;
}//生成秘钥方法2
private SecretKey geneKey2() throwsException {//获取一个密钥生成器实例
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
SecureRandom random= newSecureRandom();
keyGenerator.init(random);
SecretKey secretKey=keyGenerator.generateKey();returnsecretKey;
}//生成秘钥方法3
private SecretKey geneKey3() throwsException {//获取一个密钥生成器实例
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
SecretKey secretKey=keyGenerator.generateKey();returnsecretKey;
}
}