AES_CBC模式解密 填充 PKCS7Padding
import lombok.extern.slf4j.Slf4j;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.springframework.stereotype.Component;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import java.security.Security;
import java.util.Arrays;
@Slf4j
@Component
public class AesCbcUtils {
final String KEY_ALGORITHM = "AES";
final String algorithmStr = "AES/CBC/PKCS7Padding";
private Key key;
private Cipher cipher;
public byte[] decrypt(byte[] encryptedData, byte[] keyBytes,byte[] iv) {
byte[] encryptedText = null;
init(keyBytes);
System.out.println("IV:" + new String(iv));
try {
cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(iv));
encryptedText = cipher.doFinal(encryptedData);
} catch (Exception e) {
e.printStackTrace();
}
return encryptedText;
}
public void init(byte[] keyBytes) {
int base = 16;
if (keyBytes.length % base != 0) {
int groups = keyBytes.length / base + (keyBytes.length % base != 0 ? 1 : 0);
byte[] temp = new byte[groups * base];
Arrays.fill(temp, (byte) 0);
System.arraycopy(keyBytes, 0, temp, 0, keyBytes.length);
keyBytes = temp;
}
Security.addProvider(new BouncyCastleProvider());
key = new SecretKeySpec(keyBytes, KEY_ALGORITHM);
try {
cipher = Cipher.getInstance(algorithmStr, "BC");
} catch ( Exception e) {
e.printStackTrace();
}
}
}