package com.jy.demo.web; import java.security.Provider; import java.security.SecureRandom; import java.security.Security; import java.util.Arrays; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class AESUtils{ public static final String IV = "2015030120123456"; private static final Logger logger = LoggerFactory.getLogger(AESUtils.class); public static byte[] aesEncrypt(String content, String pkey) { try { SecretKeySpec key = new SecretKeySpec(pkey.getBytes(), "AES"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); IvParameterSpec iv = new IvParameterSpec("2015030120123456".getBytes()); cipher.init(1, key, iv); return cipher.doFinal(content.getBytes("UTF-8")); } catch (Exception e) { e.printStackTrace(); } return null; } private static SecretKey generateKey(String secretKey) throws Exception { Provider p = Security.getProvider("SUN"); SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG", p); secureRandom.setSeed(secretKey.getBytes()); KeyGenerator kg = KeyGenerator.getInstance("AES"); kg.init(secureRandom); return kg.generateKey(); } public static String aesEncryptStr(String content, String pkey) { byte[] aesEncrypt = aesEncrypt(content, pkey); logger.debug("aesEncrypt String:" + Arrays.toString(aesEncrypt)); String base64EncodeStr = Base64.encodeBase64String(aesEncrypt); logger.debug("aesEncrypt base64EncodeStr:" + base64EncodeStr); return base64EncodeStr; } public static String aesDecodeStr(String content, String pkey) throws Exception { byte[] base64DecodeStr = Base64.decodeBase64(content); logger.debug("base64DecodeStr String:" + Arrays.toString(base64DecodeStr)); byte[] aesDecode = aesDecode(base64DecodeStr, pkey); if (aesDecode == null) { return null; } String result = new String(aesDecode, "UTF-8"); logger.debug("aesDecode result:" + result); return result; } public static byte[] aesDecode(byte[] content, String pkey) { try { SecretKeySpec key = new SecretKeySpec(pkey.getBytes(), "AES"); IvParameterSpec iv = new IvParameterSpec("2015030120123456".getBytes("UTF-8")); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(2, key, iv); return cipher.doFinal(content); } catch (Exception e) { e.printStackTrace(); } return null; } public static void main(String[] args) throws Exception { System.out.println( AESUtils.aesEncryptStr("123456", "abcdnnnnnn123456"));//根据key加密 System.out.println( AESUtils.aesDecodeStr("i/urUHvLlepO+NWthBU7AA==", "abcdnnnnnn123456"));//根据加密后密码还有加密key解密 } }