对称加密工具类
package util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.net.URLDecoder;
import java.net.URLEncoder;
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.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import entity.Student;
public class AESUtils {
static {
if(!isKeyExists()) {
writeKey(createKey());
}
}
private static Key createKey() {
Key key =null;
try {
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
SecretKey secretKey = keyGenerator.generateKey();
byte[] keyBytes = secretKey.getEncoded();
key = new SecretKeySpec(keyBytes,"AES");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return key;
}
public static <T> String key2Json4Encode(T key) {
ObjectMapper mapper=new ObjectMapper();
String urlEncode = null;
try {
String mapJakcson =mapper.writeValueAsString(key);
String encodeBase64=Base64.encodeBase64String(mapJakcson.getBytes());
urlEncode = URLEncoder.encode(encodeBase64,"UTF-8");
} catch (JsonProcessingException e1) {
e1.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return urlEncode;
}
public static <T> String key2Json(T key) {
ObjectMapper mapper=new ObjectMapper();
String mapJackson = null;
try {
mapJackson =mapper.writeValueAsString(key);
} catch (JsonProcessingException e1) {
e1.printStackTrace();
}
return mapJackson;
}
public static <T> T json4Decode2Key(String keyJson,Class<T> clazz) {
ObjectMapper mapper=new ObjectMapper();
T t = null;
try {
String urlDecode = URLDecoder.decode(keyJson,"UTF-8");
byte[] decodeBase64 = Base64.decodeBase64(urlDecode);
t=mapper.readValue(decodeBase64, clazz);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return t;
}
public static <T> T json2Key(String keyJson,Class<T> clazz) {
ObjectMapper mapper=new ObjectMapper();
T t = null;
try {
t=mapper.readValue(keyJson, clazz);
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return t;
}
public static String encode(String string,Key key) {
String urlEncode=null;
try {
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] result = cipher.doFinal(string.getBytes());
String encodeBase64=Base64.encodeBase64String(result);
urlEncode=URLEncoder.encode(encodeBase64,"UTF-8");
}catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
return urlEncode;
}
public static String decode(String urlEncode,Key key) {
byte[] result = null;
try {
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
String urlDecode = URLDecoder.decode(urlEncode,"UTF-8");
byte[] decodeBase64 = Base64.decodeBase64(urlDecode);
result = cipher.doFinal(decodeBase64);
}catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
return new String(result);
}
public static Key readKey(){
ObjectInputStream ois =null;
Key key=null;
try {
ois = new ObjectInputStream(new FileInputStream("key.pem"));
Object obj=ois.readObject();
key=(Key)obj;
ois.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally {
if(ois!=null) {
try {
ois.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return key;
}
private static void writeKey(Key key){
ObjectOutputStream oos=null;
try {
oos=new ObjectOutputStream(new FileOutputStream("key.pem"));
oos.writeObject(key);
} catch (IOException e) {
e.printStackTrace();
}finally {
if(oos!=null) {
try {
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private static boolean isKeyExists() {
File file=new File("key.pem");
if(file.exists()) {
return true;
}
return false;
}
}