import org.apache.commons.codec.binary.Base64;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
/***
* AES加密解密算法
* @author Qfh
* 地址:http://blog.csdn.net/hbcui1984/article/details/5201247
*/
public class AESUtil {
public static String AesKey = "duanRon!@"; //秘钥
/**
* 加密
*
* @param content 需要加密的内容
* @param password 加密密码
* @return
*/
public static byte[] encrypt(String content, String password) {
try {
SecretKeySpec key = new SecretKeySpec(password.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");// 创建密码器
//这种加密方式不对
// KeyGenerator kgen = KeyGenerator.getInstance("AES");
// kgen.init(128, new SecureRandom(password.getBytes()));
// SecretKey secretKey = kgen.generateKey();
// byte[] enCodeFormat = secretKey.getEncoded();
// SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
// Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");// 创建密码器
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;
}
/**解密
* @param content 待解密内容
* @param password 解密密钥
* @return
*/
public static byte[] decrypt(byte[] content, String password) {
try {
SecretKeySpec key = new SecretKeySpec(password.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");// 创建密码器
cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
int length = content.length;
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;
}
public static void main(String[] args) throws Exception {
String content = "小明学会了123456,但是他喜欢abcdeef,可是!@######未知";
String password = "duanRon!@";
//加密
System.out.println("加密前:" + content);
byte[] encryptResult = encrypt(content, password);
System.out.println("密文:" + new String(encryptResult));
//解密
byte[] decryptResult = decrypt(encryptResult,password);
System.out.println("解密后:" + new String(decryptResult));
}
/**
* base64编码字符串
*
* @param data
* @return
*/
public static String bytetobase64(byte[] data) {
return Base64.encodeBase64String(data);
}
public static byte[] base64StoByte(String base64Str){
return Base64.decodeBase64(base64Str);
}
///附加
/**将二进制转换成16进制
* @param buf
// * @return
// */
// public static String parseByte2HexStr(byte buf[]) {
// StringBuffer sb = new StringBuffer();
// 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());
// }
// return sb.toString();
// }
//
// /**将16进制转换为二进制
// * @param hexStr
// * @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);
// }
// return result;
// }
//
// /**
// * 使用ASE加密后
// * 加密后返回16进制数据
// * @param temp
// * @return
// */
// public static String encode(String temp){
// byte[] tempByte = ASEUtil.encrypt(temp, ASEUtil.AesKey); //加密
// temp = ASEUtil.parseByte2HexStr(tempByte); //将二进制转换成16进制
// return temp;
// }
//
// /**
// * 解密返回UTF-8字符串
// * @param temp
// * @return
// */
// public static String decode(String temp){
// byte[] tempByte = ASEUtil.parseHexStr2Byte(temp); //将16进制转换为二进制
// tempByte = ASEUtil.decrypt(tempByte, ASEUtil.AesKey); //解密
// try {
// temp = new String(tempByte,"UTF-8");
// }catch(UnsupportedEncodingException e) {
// e.printStackTrace();
// }
// return temp;
// }
}
代码如上 开箱易用