AESUtil
1 package com.jf.utils; 2 3 import javax.crypto.Cipher; 4 import javax.crypto.spec.SecretKeySpec; 5 6 import org.apache.commons.codec.binary.Base64; 7 import org.slf4j.Logger; 8 import org.slf4j.LoggerFactory; 9 /** 10 * <p>Description: [AES-128-ECB加密模式,key需要为16位]</p> 11 */ 12 public class AESUtil { 13 private static final Logger logger = LoggerFactory.getLogger(AESUtil.class); 14 15 // 加密 16 public static String encrypt(String sSrc, String sKey) throws Exception { 17 if (sKey == null) { 18 logger.info("Key为空null"); 19 return null; 20 } 21 // 判断Key是否为16位 22 if (sKey.length() != 16) { 23 logger.info("Key长度不是16位"); 24 return null; 25 } 26 byte[] raw = sKey.getBytes("utf-8"); 27 SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); 28 Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//"算法/模式/补码方式" 29 cipher.init(Cipher.ENCRYPT_MODE, skeySpec); 30 byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8")); 31 return new String(new Base64().encode(encrypted),"UTF-8");//此处使用BASE64做转码功能,同时能起到2次加密的作用 32 } 33 34 // 解密 35 public static String decrypt(String sSrc, String sKey) throws Exception { 36 try { 37 // 判断Key是否正确 38 if (sKey == null) { 39 logger.info("Key为空null"); 40 return null; 41 } 42 // 判断Key是否为16位 43 if (sKey.length() != 16) { 44 logger.info("Key长度不是16位"); 45 return null; 46 } 47 byte[] raw = sKey.getBytes("utf-8"); 48 SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); 49 Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); 50 cipher.init(Cipher.DECRYPT_MODE, skeySpec); 51 byte[] encrypted1 = new Base64().decode(sSrc.getBytes("UTF-8"));//先用base64解密 52 try { 53 byte[] original = cipher.doFinal(encrypted1); 54 String originalString = new String(original, "utf-8"); 55 return originalString; 56 } catch (Exception e) { 57 logger.info(e.toString()); 58 return null; 59 } 60 } catch (Exception ex) { 61 logger.info(ex.toString()); 62 return null; 63 } 64 } 65 66 public static void main(String[] args) throws Exception { 67 /* 68 * 此处使用AES-128-ECB加密模式,key需要为16位 69 */ 70 String cKey = "XfLxxx7qjxxxx"; 71 /*// 需要加密的字串 72 String cSrc = "cp2012c*0.150*215*WD1233768467*1800"; 73 logger.info("加密前的字串是:" + cSrc); 74 // 加密 75 String enString = AESUtil.encrypt(cSrc, cKey); 76 logger.info("加密后的字串是:" + enString); 77 // 解密pVAxxxxEp3hxxxx2bO7ExxxhjUN0ODxxxNblJuFz4aNMVxxxK6sojo 78 String DeString = AESUtil.decrypt(enString, cKey); 79 logger.info("解密后的字串是:" + DeString);*/ 80 81 System.out.println(AESUtil.encrypt("cid=421&vcode=xxxx&stime=2017-05-10 08:56:34&etime=2017-05-10 16:17:49", cKey)); 82 } 83 }