public class AesUtil {
private static final String KEY_ALGORITHM = "AES";
/**
* 默认的加密算法
*/
private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";
/**
* HMAC-SHA1加密
*
* @param key 密钥
* @param params 参数
* @return
*/
private static String hmacSha1(String key, String params) throws Exception {
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA1"));
byte[] signData = mac.doFinal(params.getBytes("UTF-8"));
return new BASE64Encoder().encode(signData);
}
/**
* MD5加密方式
*
* @param params 加密参数
* @return
*/
private static String md5(String params) throws Exception {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] array = md.digest(params.getBytes("UTF-8"));
StringBuilder sb = new StringBuilder();
for (byte item : array) {
sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
}
return sb.toString().toLowerCase();
}
/**
* 加密
*
* @param content 需要加密的内容
* @param password 密码
* @return
* @throws Exception
*/
public static String encrypt(String content, String password) throws Exception {
// 创建密码器
Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
byte[] byteContent = content.getBytes("utf-8");
// 初始化为加密模式的密码器
cipher.init(Cipher.ENCRYPT_MODE, getSecretKey(password));
// 加密
byte[] result = cipher.doFinal(byteContent);
//通过Base64转码返回
return Base64.encodeBase64String(result);
}
/**
* 解密
*
* @param content 需要加密的内容
* @param password 密码
* @return
* @throws Exception
*/
public static String decrypt(String content, String password) throws Exception {
//实例化
Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
//使用密钥初始化,设置为解密模式
cipher.init(Cipher.DECRYPT_MODE, getSecretKey(password));
//执行操作
byte[] result = cipher.doFinal(Base64.decodeBase64(content));
return new String(result, "utf-8");
}
/**
* 生成加密秘钥
*
* @param password 密码
* @return
* @throws Exception
*/
private static SecretKeySpec getSecretKey(String password) throws Exception {
//返回生成指定算法密钥生成器的 KeyGenerator 对象
KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM);
//AES 要求密钥长度为 128
kg.init(128, new SecureRandom(password.getBytes()));
//生成一个密钥
SecretKey secretKey = kg.generateKey();
// 转换为AES专用密钥
return new SecretKeySpec(secretKey.getEncoded(), KEY_ALGORITHM);
}
}