package com.nuvole.util;
|
|
import java.security.AlgorithmParameters;
|
import java.security.Security;
|
|
import javax.crypto.Cipher;
|
import javax.crypto.spec.IvParameterSpec;
|
import javax.crypto.spec.SecretKeySpec;
|
|
import org.apache.commons.codec.binary.Base64;
|
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
|
/**
|
* 微信加解密工具类
|
*
|
* @author liujun
|
* @Date 2019/5/27 17:36
|
*/
|
public class AesCbcUtil {
|
|
static {
|
// BouncyCastle是一个开源的加解密解决方案,主页在http://www.bouncycastle.org/
|
Security.addProvider(new BouncyCastleProvider());
|
}
|
|
/**
|
* AES解密
|
*
|
* @param data
|
* //密文,被加密的数据
|
* @param key
|
* //秘钥
|
* @param iv
|
* //偏移量
|
* @param encodingFormat
|
* //解密后的结果需要进行的编码
|
* @return
|
* @throws Exception
|
*/
|
public static String decrypt(String data, String key, String iv, String encodingFormat) throws Exception {
|
// initialize();
|
// 被加密的数据
|
byte[] dataByte = Base64.decodeBase64(data.getBytes());
|
// 加密秘钥
|
byte[] keyByte = Base64.decodeBase64(key.getBytes());
|
// 偏移量
|
byte[] ivByte = Base64.decodeBase64(iv.getBytes());
|
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
|
SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
|
AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
|
parameters.init(new IvParameterSpec(ivByte));
|
// 初始化
|
cipher.init(Cipher.DECRYPT_MODE, spec, parameters);
|
byte[] resultByte = cipher.doFinal(dataByte);
|
if (null != resultByte && resultByte.length > 0) {
|
String result = new String(resultByte, encodingFormat);
|
return result;
|
}
|
return null;
|
}
|
}
|