package com.ruoyi.errand.utils;
|
|
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
|
import javax.crypto.BadPaddingException;
|
import javax.crypto.Cipher;
|
import javax.crypto.IllegalBlockSizeException;
|
import javax.crypto.NoSuchPaddingException;
|
import javax.crypto.spec.IvParameterSpec;
|
import javax.crypto.spec.SecretKeySpec;
|
import java.security.*;
|
|
/**
|
* AES加密
|
* @author pzb
|
* @Date 2021/12/3 15:43
|
*/
|
public class AES {
|
|
public static boolean initialized = false;
|
|
/**
|
* AES解密
|
*
|
* @param content
|
* 密文
|
* @return
|
* @throws InvalidAlgorithmParameterException
|
* @throws NoSuchProviderException
|
*/
|
public byte[] decrypt(byte[] content, byte[] keyByte, byte[] ivByte) throws InvalidAlgorithmParameterException {
|
initialize();
|
try {
|
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
|
Key sKeySpec = new SecretKeySpec(keyByte, "AES");
|
cipher.init(Cipher.DECRYPT_MODE, sKeySpec, generateIV(ivByte));// 初始化
|
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();
|
} catch (NoSuchProviderException e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
} catch (Exception e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
public static void initialize() {
|
if (initialized)
|
return;
|
Security.addProvider(new BouncyCastleProvider());
|
initialized = true;
|
}
|
|
// 生成iv
|
public static AlgorithmParameters generateIV(byte[] iv) throws Exception {
|
AlgorithmParameters params = AlgorithmParameters.getInstance("AES");
|
params.init(new IvParameterSpec(iv));
|
return params;
|
}
|
}
|