packagecom.ailin.test;importjava.io.UnsupportedEncodingException;importjava.security.InvalidKeyException;importjava.security.NoSuchAlgorithmException;importjava.security.SecureRandom;importjavax.crypto.BadPaddingException;importjavax.crypto.Cipher;importjavax.crypto.IllegalBlockSizeException;importjavax.crypto.KeyGenerator;importjavax.crypto.NoSuchPaddingException;importjavax.crypto.SecretKey;importjavax.crypto.spec.SecretKeySpec;public classAES {/*** 加密
*
*@paramcontent
* 需要加密的內容
*@parampassword
* 加密密碼
*@return
*/
public static byte[] encrypt(String content, String password) {try{
KeyGenerator kgen= KeyGenerator.getInstance("AES");
kgen.init(128, newSecureRandom(password.getBytes()));
SecretKey secretKey=kgen.generateKey();byte[] enCodeFormat =secretKey.getEncoded();
SecretKeySpec key= new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher= Cipher.getInstance("AES");//創建密碼器
byte[] byteContent = content.getBytes("utf-8");
cipher.init(Cipher.ENCRYPT_MODE, key);//初始化
byte[] result =cipher.doFinal(byteContent);return result; //加密
} catch(NoSuchAlgorithmException e) {
e.printStackTrace();
}catch(NoSuchPaddingException e) {
e.printStackTrace();
}catch(InvalidKeyException e) {
e.printStackTrace();
}catch(UnsupportedEncodingException e) {
e.printStackTrace();
}catch(IllegalBlockSizeException e) {
e.printStackTrace();
}catch(BadPaddingException e) {
e.printStackTrace();
}return null;
}/*** 解密
*
*@paramcontent
* 待解密內容
*@parampassword
* 解密密鑰
*@return
*/
public static byte[] decrypt(byte[] content, String password) {try{
KeyGenerator kgen= KeyGenerator.getInstance("AES");
kgen.init(128, newSecureRandom(password.getBytes()));
SecretKey secretKey=kgen.generateKey();byte[] enCodeFormat =secretKey.getEncoded();
SecretKeySpec key= new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher= Cipher.getInstance("AES");//創建密碼器
cipher.init(Cipher.DECRYPT_MODE, key);//初始化
byte[] result =cipher.doFinal(content);return result; //加密
} catch(NoSuchAlgorithmException e) {
e.printStackTrace();
}catch(NoSuchPaddingException e) {
e.printStackTrace();
}catch(InvalidKeyException e) {
e.printStackTrace();
}catch(IllegalBlockSizeException e) {
e.printStackTrace();
}catch(BadPaddingException e) {
e.printStackTrace();
}return null;
}/*** 將二進制轉換成16進制
*
*@parambuf
*@return
*/
public static String parseByte2HexStr(bytebuf[]) {
StringBuffer sb= newStringBuffer();for (int i = 0; i < buf.length; i++) {
String hex= Integer.toHexString(buf[i] & 0xFF);if (hex.length() == 1) {
hex= '0' +hex;
}
sb.append(hex.toUpperCase());
}returnsb.toString();
}/*** 將16進制轉換為二進制
*
*@paramhexStr
*@return
*/
public static byte[] parseHexStr2Byte(String hexStr) {if (hexStr.length() < 1)return null;byte[] result = new byte[hexStr.length() / 2];for (int i = 0; i < hexStr.length() / 2; i++) {int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);
result[i]= (byte) (high * 16 +low);
}returnresult;
}/*** 加密
*
*@paramcontent
* 需要加密的內容
*@parampassword
* 加密密碼
*@return
*/
public static byte[] encrypt2(String content, String password) {try{
SecretKeySpec key= new SecretKeySpec(password.getBytes(), "AES");
Cipher cipher= Cipher.getInstance("AES/ECB/NoPadding");byte[] byteContent = content.getBytes("utf-8");
cipher.init(Cipher.ENCRYPT_MODE, key);//初始化
byte[] result =cipher.doFinal(byteContent);return result; //加密
} catch(NoSuchAlgorithmException e) {
e.printStackTrace();
}catch(NoSuchPaddingException e) {
e.printStackTrace();
}catch(InvalidKeyException e) {
e.printStackTrace();
}catch(UnsupportedEncodingException e) {
e.printStackTrace();
}catch(IllegalBlockSizeException e) {
e.printStackTrace();
}catch(BadPaddingException e) {
e.printStackTrace();
}return null;
}public static void main(String[] args) throwsUnsupportedEncodingException {
String content= "我是shoneworn";
String password= "12345678";//加密
System.out.println("加密前:" +content);byte[] encode =encrypt(content, password);//傳輸過程,不轉成16進制的字符串,就等着程序崩潰掉吧
String code =parseByte2HexStr(encode);
System.out.println("密文字符串:" +code);byte[] decode =parseHexStr2Byte(code);//解密
byte[] decryptResult =decrypt(decode, password);
System.out.println("解密后:" + new String(decryptResult, "UTF-8")); //不轉碼會亂碼
}
}