You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
3.4 KiB
110 lines
3.4 KiB
6 years ago
|
package ${basePackage}.frame.utils;
|
||
6 years ago
|
|
||
|
import javax.crypto.BadPaddingException;
|
||
|
import javax.crypto.Cipher;
|
||
|
import javax.crypto.IllegalBlockSizeException;
|
||
|
import javax.crypto.NoSuchPaddingException;
|
||
|
import javax.crypto.spec.SecretKeySpec;
|
||
|
import java.io.UnsupportedEncodingException;
|
||
|
import java.security.InvalidKeyException;
|
||
|
import java.security.NoSuchAlgorithmException;
|
||
|
|
||
|
/**
|
||
|
* AESUtil 对称加密和解密工具类
|
||
|
*
|
||
|
* @author wangbing
|
||
|
* @version 0.0.1
|
||
|
* @since 2017-01-01
|
||
|
*/
|
||
|
public class AESUtil {
|
||
|
|
||
|
private static final String ALGORITHM = "AES";
|
||
|
private static final String ALGORITHM_STR = "AES/ECB/PKCS5Padding";
|
||
|
|
||
|
/**
|
||
|
* 加密
|
||
|
*
|
||
|
* @param data 待加密字节数组
|
||
|
* @param secret 密钥
|
||
|
* @return base64字符串
|
||
|
*/
|
||
|
public static byte[] encrypt(byte[] data, String secret) {
|
||
|
try {
|
||
|
if (secret.length() != 16) {
|
||
|
throw new IllegalArgumentException("secret's length is not 16");
|
||
|
}
|
||
|
SecretKeySpec key = new SecretKeySpec(secret.getBytes(), ALGORITHM);
|
||
|
Cipher cipher = Cipher.getInstance(ALGORITHM_STR); // 创建密码器
|
||
|
cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
|
||
|
return cipher.doFinal(data);// 加密
|
||
|
} catch (NoSuchPaddingException e) {
|
||
|
e.printStackTrace();
|
||
|
} catch (NoSuchAlgorithmException e) {
|
||
|
e.printStackTrace();
|
||
|
} catch (InvalidKeyException e) {
|
||
|
e.printStackTrace();
|
||
|
} catch (IllegalBlockSizeException e) {
|
||
|
e.printStackTrace();
|
||
|
} catch (BadPaddingException e) {
|
||
|
e.printStackTrace();
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 加密
|
||
|
*
|
||
|
* @param data 待加密字节数组
|
||
|
* @param secret 密钥
|
||
|
* @return base64字符串
|
||
|
*/
|
||
|
public static String encrypt2Base64(byte[] data, String secret) {
|
||
|
byte[] encrypt = encrypt(data, secret);
|
||
|
return Base64Util.encodeToString(encrypt, false);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 解密
|
||
|
*
|
||
|
* @param data 待解密字节数组
|
||
|
* @param secret 密钥
|
||
|
* @return
|
||
|
*/
|
||
|
public static byte[] decrypt(byte[] data, String secret) {
|
||
|
try {
|
||
|
if (secret.length() != 16) {
|
||
|
throw new IllegalArgumentException("secret's length is not 16");
|
||
|
}
|
||
|
SecretKeySpec key = new SecretKeySpec(secret.getBytes(), ALGORITHM);
|
||
|
Cipher cipher = Cipher.getInstance(ALGORITHM_STR);
|
||
|
cipher.init(Cipher.DECRYPT_MODE, key);
|
||
|
return cipher.doFinal(data);
|
||
|
} 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 byte[] decryptBase64(String base64Data, String secret) {
|
||
|
byte[] decode = Base64Util.decode(base64Data);
|
||
|
return decrypt(decode, secret);
|
||
|
}
|
||
|
|
||
|
public static String decrypt2String(String base64Data, String secret) {
|
||
|
byte[] bytes = decryptBase64(base64Data, secret);
|
||
|
try {
|
||
|
return new String(bytes, "UTF-8");
|
||
|
} catch (UnsupportedEncodingException e) {
|
||
|
e.printStackTrace();
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
}
|