package com.dy.pipIrrWechat.util;
|
|
import javax.crypto.Cipher;
|
import javax.crypto.NoSuchPaddingException;
|
import javax.crypto.spec.GCMParameterSpec;
|
import javax.crypto.spec.SecretKeySpec;
|
import java.io.IOException;
|
import java.security.GeneralSecurityException;
|
import java.security.InvalidAlgorithmParameterException;
|
import java.security.InvalidKeyException;
|
import java.security.NoSuchAlgorithmException;
|
import java.util.Base64;
|
|
/**
|
* @author ZhuBaoMin
|
* @date 2024-07-15 10:18
|
* @LastEditTime 2024-07-15 10:18
|
* @Description
|
*/
|
public class AesUtil {
|
static final int KEY_LENGTH_BYTE = 32;
|
static final int TAG_LENGTH_BIT = 128;
|
|
/**
|
* 解密
|
* @param apiV3Key apiV3密钥
|
* @param associatedData 附加数据
|
* @param nonce 随机串
|
* @param ciphertext 数据密文
|
* @return 解密后字符串
|
* @throws GeneralSecurityException
|
* @throws IOException
|
*/
|
public static String decryptToString(byte[] apiV3Key, byte[] associatedData, byte[] nonce, String ciphertext) throws GeneralSecurityException, IOException {
|
try {
|
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
|
SecretKeySpec key = new SecretKeySpec(apiV3Key, "AES");
|
GCMParameterSpec spec = new GCMParameterSpec(TAG_LENGTH_BIT, nonce);
|
|
cipher.init(Cipher.DECRYPT_MODE, key, spec);
|
cipher.updateAAD(associatedData);
|
|
return new String(cipher.doFinal(Base64.getDecoder().decode(ciphertext)), "utf-8");
|
} catch (NoSuchAlgorithmException | NoSuchPaddingException e) {
|
throw new IllegalStateException(e);
|
} catch (InvalidKeyException | InvalidAlgorithmParameterException e) {
|
throw new IllegalArgumentException(e);
|
}
|
}
|
}
|