| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- package com.template.common.utils;
- import com.template.config.ControlConfig;
- import org.apache.commons.codec.binary.Base64;
- import javax.annotation.Resource;
- import javax.crypto.Cipher;
- import javax.crypto.spec.IvParameterSpec;
- import javax.crypto.spec.SecretKeySpec;
- import java.io.UnsupportedEncodingException;
- import java.net.URLDecoder;
- import java.nio.charset.Charset;
- import java.nio.charset.StandardCharsets;
- /**
- * @Author: binguo
- * @Date: 2024/1/5 星期五 14:26
- * @Description: com.template.common.utils
- * @Version: 1.0
- */
- public class AesTestOne {
- /**
- * AES 对称加密(RSA非对称加密)
- * CBC 有向量 (ECB 无向量)
- * PKCS5Padding 填充模式(NoPadding 无填充)
- */
- private static final String ALG_AES_CBC_PKCS5 = "AES/CBC/PKCS5Padding";
- private static final String ALGORITHM = "AES";
- private static final Charset UTF8 = StandardCharsets.UTF_8;
- //private static String aesKey = "61afd794ed3244e995c5e894e5788193"; // 指定好的秘钥,非Base64和16进制
- private static String aesIv = "activevector4api"; // 偏移量
- private static SecretKeySpec skeySpec;
- private static IvParameterSpec iv;
- /**
- * 解密方法
- * @param cipherStr Base64编码的加密字符串
- * @return 解密后的字符串(UTF8编码)
- * @throws Exception 异常
- */
- public static String decrypt(String cipherStr, String appSecret) throws Exception{
- // step 1 获得一个密码器
- Cipher cipher = Cipher.getInstance(ALG_AES_CBC_PKCS5);
- // step 2 初始化密码器,指定是加密还是解密(Cipher.DECRYPT_MODE 解密; Cipher.ENCRYPT_MODE 加密)
- // 加密时使用的盐来够造秘钥对象
- skeySpec = new SecretKeySpec(appSecret.getBytes(),ALGORITHM);
- // 加密时使用的向量,16位字符串
- iv = new IvParameterSpec(aesIv.getBytes());
- cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
- // 对加密报文进行base64解码
- byte[] encrypted1 = Base64.decodeBase64(cipherStr);
- // 解密后的报文数组
- byte[] original = cipher.doFinal(encrypted1);
- // 输出utf8编码的字符串,输出字符串需要指定编码格式
- return new String(original, UTF8);
- }
- /**
- * 加密
- * @param plainText 明文
- * @return Base64编码的密文
- * @throws Exception 加密异常
- */
- public static String encrypt(String plainText, String appSecret) throws Exception{
- Cipher cipher = Cipher.getInstance(ALG_AES_CBC_PKCS5);
- skeySpec = new SecretKeySpec(appSecret.getBytes(),ALGORITHM);
- iv = new IvParameterSpec(aesIv.getBytes());
- cipher.init(Cipher.ENCRYPT_MODE, skeySpec,iv);
- // 这里的编码格式需要与解密编码一致
- byte [] encryptText = cipher.doFinal(plainText.getBytes(UTF8));
- return Base64.encodeBase64String(encryptText);
- }
- public static void main(String[] args) throws Exception {
- // URL解码
- logger.info("");
- }
- }
|