加密解密的解决方案

匿名 (未验证) 提交于 2019-12-02 23:49:02

问题:

对会员信息进行加密保存到数据库中

解决方案:

使用mybatis的拦截器拦截对象解密展现到界面中,将对象加密保存到数据库中

执行方案的充分必要条件

  1. 保证密钥不进行修改,如果需求更改为需要动态修改密钥,就需要进行二次开发
  2. 注册拦截器

影响:

  1. 数据库中的敏感数据得到加密,提高安全性
  2. 每次执行sql语句时都会触发到拦截器,给后台服务器增加压力
  3. 在解密数据和加密数据时,会导致用户等待时间增加

针对对象:

所有经由mybatis层执行的sql语句(不包括hibernate和jdbc)

触发的条件:

  1. 更新、插入、查询等操作
  2. 操作参数中对象带有加密解密的注解

使用的工具:

mybatis拦截器(插件)

涉及到的代码处(逻辑上)

  1. 拦截器:AESInterceptor
  2. 注解类:DecryptField、EncryptField
  3. 枚举类:CorpMemberUpdateFlag

  4. 更新的通用工具类:UpdateUtils
  5. service层:CorpMemberService
  6. controller层:CorpMemberController
  7. 注册mybatis的xml文件:mybatis-config.xml

具体实现逻辑

  1. 创建加密解密的注解
  2. 创建拦截器,拦截dao层的sql语句,判断拦截下来的sql操作
  3. 如果是查询或者插入操作,就判断拦截下来的参数中是否有加密的注解,如果有,就对带有加密注解的字段的数据进行加密
  4. 加密的过程中会筛选加了注解的字段的值,是否可以进行加密,
    如果该值为空或解密失败、解密成功这三种,就会跳过,不进行加密
    如果该值不是16进制或者字符串的长度不能被16整除,都进行加密。
  5. 然后就执行sql语句
  6. 判断返回值,如果是集合类型,就进行判断解密条件,否则就直接返回这个对象
  7. 解密过程中,判断集合中的对象是否存在解密注解,如果存在,就对带有解密注解的字段进行解密。并判断该值是否需要解密
    如果该值经过判断后可以解密,才进行解密,否则跳过,并在日志中输出ERROR类型的信息
  8. 执行完成后,就返回这个值到前端

更正后得到的好处

  1. 只需要在对象中的字段上添加加密解密的注解,就能实现数据的加密解密
  2. 只需要在controller中添加对应表的数据更新操作,就能批量更新敏感数据
文章来源: https://blog.csdn.net/weixin_41605123/article/details/96832426
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!