package com.qianwen.core.tool.utils; import java.nio.charset.Charset; import java.util.Arrays; import java.util.Objects; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import org.springframework.lang.Nullable; import org.springframework.util.Assert; /* loaded from: blade-core-tool-9.3.0.0-SNAPSHOT.jar:org/springblade/core/tool/utils/AesUtil.class */ public class AesUtil { public static final Charset DEFAULT_CHARSET = Charsets.UTF_8; public static String genAesKey() { return StringUtil.random(32); } public static byte[] encrypt(String content, String aesTextKey) { return encrypt(content.getBytes(DEFAULT_CHARSET), aesTextKey); } public static byte[] encrypt(String content, Charset charset, String aesTextKey) { return encrypt(content.getBytes(charset), aesTextKey); } public static byte[] encrypt(byte[] content, String aesTextKey) { return encrypt(content, ((String) Objects.requireNonNull(aesTextKey)).getBytes(DEFAULT_CHARSET)); } public static String encryptToHex(String content, String aesTextKey) { return HexUtil.encodeToString(encrypt(content, aesTextKey)); } public static String encryptToHex(byte[] content, String aesTextKey) { return HexUtil.encodeToString(encrypt(content, aesTextKey)); } public static String encryptToBase64(String content, String aesTextKey) { return Base64Util.encodeToString(encrypt(content, aesTextKey)); } public static String encryptToBase64(byte[] content, String aesTextKey) { return Base64Util.encodeToString(encrypt(content, aesTextKey)); } @Nullable public static String decryptFormHexToString(@Nullable String content, String aesTextKey) { byte[] hexBytes = decryptFormHex(content, aesTextKey); if (hexBytes == null) { return null; } return new String(hexBytes, DEFAULT_CHARSET); } @Nullable public static byte[] decryptFormHex(@Nullable String content, String aesTextKey) { if (StringUtil.isBlank(content)) { return null; } return decryptFormHex(content.getBytes(DEFAULT_CHARSET), aesTextKey); } public static byte[] decryptFormHex(byte[] content, String aesTextKey) { return decrypt(HexUtil.decode(content), aesTextKey); } @Nullable public static String decryptFormBase64ToString(@Nullable String content, String aesTextKey) { byte[] hexBytes = decryptFormBase64(content, aesTextKey); if (hexBytes == null) { return null; } return new String(hexBytes, DEFAULT_CHARSET); } @Nullable public static byte[] decryptFormBase64(@Nullable String content, String aesTextKey) { if (StringUtil.isBlank(content)) { return null; } return decryptFormBase64(content.getBytes(DEFAULT_CHARSET), aesTextKey); } public static byte[] decryptFormBase64(byte[] content, String aesTextKey) { return decrypt(Base64Util.decode(content), aesTextKey); } public static String decryptToString(byte[] content, String aesTextKey) { return new String(decrypt(content, aesTextKey), DEFAULT_CHARSET); } public static byte[] decrypt(byte[] content, String aesTextKey) { return decrypt(content, ((String) Objects.requireNonNull(aesTextKey)).getBytes(DEFAULT_CHARSET)); } public static byte[] encrypt(byte[] content, byte[] aesKey) { return aes(Pkcs7Encoder.encode(content), aesKey, 1); } public static byte[] decrypt(byte[] encrypted, byte[] aesKey) { return Pkcs7Encoder.decode(aes(encrypted, aesKey, 2)); } private static byte[] aes(byte[] encrypted, byte[] aesKey, int mode) { Assert.isTrue(aesKey.length == 32, "IllegalAesKey, aesKey's length must be 32"); try { Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); SecretKeySpec keySpec = new SecretKeySpec(aesKey, "AES"); IvParameterSpec iv = new IvParameterSpec(Arrays.copyOfRange(aesKey, 0, 16)); cipher.init(mode, keySpec, iv); return cipher.doFinal(encrypted); } catch (Exception e) { throw Exceptions.unchecked(e); } } /* JADX INFO: Access modifiers changed from: private */ /* loaded from: blade-core-tool-9.3.0.0-SNAPSHOT.jar:org/springblade/core/tool/utils/AesUtil$Pkcs7Encoder.class */ public static class Pkcs7Encoder { private static final int BLOCK_SIZE = 32; private Pkcs7Encoder() { } /* JADX INFO: Access modifiers changed from: private */ public static byte[] encode(byte[] src) { int count = src.length; int amountToPad = 32 - (count % 32); byte pad = (byte) (amountToPad & 255); byte[] pads = new byte[amountToPad]; for (int index = 0; index < amountToPad; index++) { pads[index] = pad; } int length = count + amountToPad; byte[] dest = new byte[length]; System.arraycopy(src, 0, dest, 0, count); System.arraycopy(pads, 0, dest, count, amountToPad); return dest; } /* JADX INFO: Access modifiers changed from: private */ public static byte[] decode(byte[] decrypted) { int pad = decrypted[decrypted.length - 1]; if (pad < 1 || pad > 32) { pad = 0; } if (pad > 0) { return Arrays.copyOfRange(decrypted, 0, decrypted.length - pad); } return decrypted; } } }