public class PartnerSign {
private PartnerSign() {}
/**
* AES加密方法
*
* @param content 明文内容
* @param password 密码
* @return 解密后字节数组转十六进制字符串
*/
public static String encrypt(String content, String password) throws Exception {
SecretKeySpec key = generateKey(password);
Cipher cipher = Cipher.getInstance("AES");// 创建密码器
byte[] byteContent = content.getBytes("utf-8");
cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化为加密模式的密码器
byte[] result = cipher.doFinal(byteContent);// 加密
return Hex.encodeHexString(result);
}
/**
* AES解密
*
* @param content 密文内容
* @param password 密码
* @return 解密后的明文
* @throws Exception
*/
public static String decrypy(String content, String password) throws Exception {
SecretKeySpec key = generateKey(password);
Cipher cipher = Cipher.getInstance("AES");// 创建密码器
cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
byte[] array = Hex.decodeHex(content.toCharArray());
byte[] result = cipher.doFinal(array);
return new String(result); // 加密
}
/**
* 生成key
* @Title: generateKey
* @param password
* @return SecretKeySpec
* @throws NoSuchAlgorithmException
*/
private static SecretKeySpec generateKey(String password)
throws NoSuchAlgorithmException {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG" );
secureRandom.setSeed(password.getBytes());
kgen.init(128, secureRandom);// 利用用户密码作为随机数初始化出
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
return key;
}
}