packagebq;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;/***@author不是白强
**/
public classAES {public static voidmain(String[] args) {
String content= "iloveyou";
String password= "baiqiang";//加密
System.out.println("加密前:" +content);byte[] encryptResult =encrypt(content, password);
String encryptResultStr=parseByte2HexStr(encryptResult);
System.out.println("加密后:" +encryptResultStr);//解密
byte[] decryptFrom =parseHexStr2Byte(encryptResultStr);byte[] decryptResult =decrypt(decryptFrom,password);
System.out.println("解密后:" + newString(decryptResult));
}/*** 加密
*
*@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;
}
}