反射给传参加密

通过反射给参数进行AES算法加密  这里是部分参数加密  

最后效果

 

 AES工具类

public class AESUtil {

    private static final String KEY_ALGORITHM = "AES";
    private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";//默认的加密算

    /**
     * AES 加密操作
     *
     * @param content
     * @param password
     * @return
     */
    public static String encrypt(String content, String password) {
        try {
            Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);

            byte[] byteContent = content.getBytes("utf-8");

            cipher.init(Cipher.ENCRYPT_MODE, getSecretKey(password));// 初始化为加密模式的密码器

            byte[] result = cipher.doFinal(byteContent);// 加密

            return Base64.getEncoder().encodeToString(result);//通过Base64转码返回
        } catch (Exception ex) {
            Logger.getLogger(AESUtil.class.getName()).log(Level.SEVERE, null, ex);
        }

        return null;
    }

    /**
     * AES 解密操作
     *
     * @param content
     * @param password
     * @return
     */
    public static String decrypt(String content, String password) {

        try {
            Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);

            cipher.init(Cipher.DECRYPT_MODE, getSecretKey(password));

            //执行操作
            byte[] result = cipher.doFinal(Base64.getDecoder().decode(content));

            return new String(result, "utf-8");
        } catch (Exception ex) {
//            log.error(ex.getMessage(),ex);
        }

        return null;
    }
}
View Code

实体类

@TableName(value ="vip_card",autoResultMap = true)
@Data
public class VipCard implements Serializable {
    /**
     * id
     */
    @TableId(type = IdType.AUTO)
    private Integer id;

    /**
     * 卡号
     */
    @TableField(typeHandler = AESHandler.class)
    private String cardNo;

    /**
     * 用户名
     */
    @TableField(typeHandler = AESHandler.class)
    private String name;

    /**
     * 性别
     */
    private Integer gender;

    /**
     * 年龄
     */
    private Integer age;

    /**
     * 邮箱
     */
    @TableField(typeHandler = AESHandler.class)
    private String email;

    /**
     * 身份证号
     */
    @TableField(typeHandler = AESHandler.class)
    private String idNumber;

    /**
     * 地址
     */
    @TableField(typeHandler = AESHandler.class)
    private String address;

    /**
     * 手机号
     */
    @TableField(typeHandler = AESHandler.class)
    private String phoneNumber;
}
View Code

测试类

public class Test {
    public static void main(String[] args) {

        String password = "VtW************==";

        VipCard vipCard = new VipCard();
        vipCard.setCardNo("6212333702610888999");
        vipCard.setName("刘鑫");
        vipCard.setGender(1);
        vipCard.setAge(59);
        vipCard.setEmail("1234568789@163.com");
        vipCard.setIdNumber("410102196666066665");
        vipCard.setAddress("杭州市拱墅区祥云路123号");
        vipCard.setPhoneNumber("13667779999");
     
        VipCard vipCard2 = new VipCard();
        //所有属性 遍历加密
        Class<? extends VipCard> aClass = vipCard.getClass();

        Field[] declaredFields = aClass.getDeclaredFields();

        try {
            for (Field field : declaredFields) {
                field.setAccessible(true);
                if (Objects.nonNull(field.getAnnotation(TableField.class))
                        && Objects.nonNull(field.get(vipCard))
                        && !"id".equals(field.getName())) {

                    Object value = field.get(vipCard);
                    String name = field.getName();
                    System.out.println("name = " + name);
                    System.out.println("传入数据===========" + value);
                    String encrypt = AESUtil.encrypt(value.toString(), password);
                    System.out.println("加密后数据=============== " + encrypt);
                    field.set(vipCard2, encrypt);

                } else {
                    try {
                        System.out.println("--------------------------------------");
                        Object value = field.get(vipCard);
                        String name = field.getName();
                        System.out.println("name = " + name);
                        System.out.println("传入数据===========" + value);
                        field.set(vipCard2, value);
                    } catch (IllegalAccessException e) {
                        System.out.println("非加密字段反射异常");
                    }
                }
            }
        } catch (IllegalAccessException e) {
            System.out.println("加密字段反射异常");
        }

        System.out.println(">>>>>>>>>>>>>>>>>原来数据" + vipCard.toString());
        System.out.println(">>>>>>>>>>>>>>>>>更新数据" + vipCard2.toString());
    }
}

 

posted @ 2021-06-04 18:19  wf.zhang  阅读(78)  评论(0编辑  收藏  举报