zoukankan      html  css  js  c++  java
  • 反射给传参加密

    通过反射给参数进行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());
        }
    }
    古人学问无遗力,少壮工夫老始成。 纸上得来终觉浅,绝知此事要躬行。
  • 相关阅读:
    Spring定时任务注解实现定时清空指定文件夹下的文件
    设计模式之单例模式
    在cmd下使用imp命令导入oracle的dmp文件报错ORA-02304
    多态是什么干嘛的
    qt编辑器的问题
    qt中文格式GBK.UTF-8,unicode 之间的转换
    mysql 安装及设置
    mysql触发器
    转载 java开发基础 https://blog.csdn.net/jiangjiewudi/article/details/9565749
    测试 转载
  • 原文地址:https://www.cnblogs.com/wf-zhang/p/14850755.html
Copyright © 2011-2022 走看看