目录
1、对称加解密工具类
package com.demo.modules.desensitization;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.crypto.SecureUtil;
import com.demo.modules.desensitization.annotation.EncryptedField;
import com.demo.modules.desensitization.annotation.EncryptedTable;
import org.springframework.core.annotation.AnnotationUtils;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.util.Objects;
/**
* @title 对称加解密工具类
* @description 主要用于mybatis拦截器中加解密字段
* @author: Wanglei
* @create 2024/4/12 0012 18:39:40
*/
public class EncryptDecryptUtils {
private static final byte[] KEYS = "Apa987^%$321c2mp".getBytes(StandardCharsets.UTF_8);
/**
* 对指定的对象进行加密处理。
* 该方法首先获取对象的类信息,然后检查该类是否被@EncryptedTable注解标记。如果被标记,
* 则遍历该类的所有字段,对这些需要加密的字段进行加密处理。
*
* @param parameterObject 需要进行加密处理的对象。该对象的类必须被@EncryptedTable注解标记。
* @throws IllegalAccessException 如果在访问字段时发生访问权限问题,则抛出此异常。
*/
public static void doEncrypt(Object parameterObject) throws IllegalAccessException{
if(ObjectUtil.isEmpty(parameterObject)){
return;
}
// 获取传入对象的类信息
Class<?> parameterObjectClass = parameterObject.getClass();
// 尝试查找该类上的@EncryptedTable注解
EncryptedTable encryptDecryptClass = AnnotationUtils.findAnnotation(parameterObjectClass, EncryptedTable.class);
if (Objects.nonNull(encryptDecryptClass)){
// 获取类中所有声明的字段
Field[] declaredFields = parameterObjectClass.getDeclaredFields();
// 对所有字段进行加密处理
encrypt(declaredFields, parameterObject);
}
}
/**
* 多field加密方法
*
* @param declaredFields
* @param parameterObject
* @param <T>
* @return
* @throws IllegalAccessException
*/
public static <T> T encrypt(Field[] declaredFields, T parameterObject) throws IllegalAccessException {
for (Field field : declaredFields) {
EncryptedField annotation = field.getAnnotation(EncryptedField.class);
if (Objects.isNull(annotation)) {
continue;
}
encrypt(field, parameterObject);
}
return parameterObject;
}
/**
* 单个field加密方法
*
* @param field
* @param parameterObject
* @param <T>
* @return
* @throws IllegalAccessException
*/
public static <T> T encrypt(Field field, T parameterObject) throws Ill