V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
PlanV
V2EX  ›  Java

Java 项目新旧数据改造字段加密方案请教

  •  
  •   PlanV · 2023-05-16 16:26:33 +08:00 · 2557 次点击
    这是一个创建于 561 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在公司项目,用户表有两万六千左右用户,身份证、手机号是采用明文存储的

    接到公安部整改通告,需要将身份证、手机号进行加密存储

    项目涉及的架构:springboot 、mybatis-plus 、Mysql 5.7

    小弟没有这方面的经验,目前有几个担心的地方:

    1 、接口怎么改造,网上搜到的教程,有用插件的,有继承 mybatis 拦截器的,有没有大佬讲讲实现的思路,或者自己的经验呀

    2 、改造接口,进行加密存储,那么读取和查询(模糊查询)之类的怎么处理

    3 、改造好接口,那么两万多条老数据怎么更新成加密后的数据

    目前想到的就是这些,小弟技术确实菜,也在网上搜了很多资料参考,包括 ChatGPT 也查找过,还是希望能得到一些大佬的实际经验教导,再次感谢

    参考了一个毕竟完整的方案,但是有个缺点,不能用查询构造器: https://blog.csdn.net/qq_33204709/article/details/129178188

    14 条回复    2023-05-30 00:41:59 +08:00
    RainCats
        1
    RainCats  
       2023-05-16 16:47:15 +08:00   ❤️ 1
    方案比较 low ,一时间只想到这些,当然如果流量比较大,数据比较多,就肯定不用看了!
    1 、可以用常规的接口入参出参加解密方案,也就是实现 RequestBodyAdviceAdapter 、ResponseBodyAdvice 两个接口,配合自定义注解搞掂
    2 、模糊查询可以采用先按其他条件查询过滤数据,然后在代码中做身份证字段的模糊匹配,最后收集符合条件的 id 去做分页查询或者是响应符合条件的数据
    3 、旧数据:可以写个隐藏接口来对已有数据做加密处理
    RainCats
        2
    RainCats  
       2023-05-16 16:50:09 +08:00   ❤️ 1
    mybatisplus 有个接口:MetaObjectHandler
    这里可以对数据做一些自定义处理
    wmlz
        3
    wmlz  
       2023-05-16 16:55:02 +08:00   ❤️ 1
    1. mybatis 有 typehandler 组件, 可以实现自动转换
    2. 模糊查询可以参考这个文章 https://blog.csdn.net/zhiyikeji/article/details/127617913
    huiyadanli
        4
    huiyadanli  
       2023-05-16 16:55:09 +08:00   ❤️ 1
    这个我有经验,在 DAO 层用 Mybatis 的 TypeHandler 是最方便的解决方案

    https://github.com/ztrun/mybatis-crypt-helper 示例代码,自己 clone 了去修改集成到你们公司项目里即可

    1. 查询条件中有加密字段时候要考虑到新老数据并行运行,用 or 输入加密前 /加密后的数据

    2. 历史数据新写个任务自己跑,才 2w 数据而已
    Habyss
        5
    Habyss  
       2023-05-16 17:26:34 +08:00
    你贴的这个链接是个很好的解决方法呀, 查询构造器的话, 之后用的时候就手动转换一下呗, 涉及加解密字段的地方应该不会很多.
    模糊查询的话, 如果不是`刚需`的话, 直接砍掉好了, 为了模糊查询而做的一些设计, 个人感觉大材小用了
    Ufo666
        6
    Ufo666  
       2023-05-16 17:33:15 +08:00
    hhhh 我去年也接到了工信部的通知,不得随意存储用户隐私信息,然后我就把用户名性别全删了,手机号用 aes 加密存储了,读取时解密,不知道行不行,因为到现在过了半年了都还没来审。如果我方案不行,求大佬立即踢醒我。
    timepast
        7
    timepast  
       2023-05-16 17:49:47 +08:00
    有查询需求吗?
    aru
        8
    aru  
       2023-05-16 19:43:28 +08:00
    @Ufo666 aes(mobile+salt) 比较好一点点
    linjiece543
        9
    linjiece543  
       2023-05-17 12:17:42 +08:00 via Android
    说个题外话,盲猜跟去年上海数据泄露那个事相关
    veike
        10
    veike  
       2023-05-17 12:33:06 +08:00 via Android
    为什么这个帖子讨论的人这么少,顶一下!
    Wh1te
        11
    Wh1te  
       2023-05-17 13:38:56 +08:00
    1 、用 Mybatis 拦截器,支持入参加密,返回值解密,可以参考这个项目: https://github.com/WhiteDG/mybatis-crypto
    3 、两万多条数据写个刷数据的脚本执行应该也很快的。
    yxisenx
        12
    yxisenx  
       2023-05-18 09:55:39 +08:00
    typehandler +1, 注意旧数据处理就好了
    HelloAmazingW
        13
    HelloAmazingW  
       2023-05-21 21:47:32 +08:00
    上个月搞过,数据库用 KMS 对敏感数据加解密,前端传过来的数据继承 Interceptor 调用 KMS 进行加解密。
    Jacian
        14
    Jacian  
       2023-05-30 00:41:59 +08:00
    去年做过敏感数据治理,提供一下个人解决思路,整体思路是通过 mybatis 拦截器对条件进行加密,查询拦截器对查询结果进行解密(不支持模糊),仅供参考
    1 、加密:statement#prepare 阶段拦截,此拦截器主要处理对查询参数、insert 语句的加密,使用 SQL parse 对 SQL 进行解析,根据占位符获取到字段名以及通过下标获取到 mybatis 值进行加密
    2 、解密:拦截 query 方法,将返回的对象根据 resultMap 配置或者驼峰下划线转换找到需要解密属性进行解密并重新赋值
    3 、不停机处理:通过配置,对部分字段解密失败返回未解密的值;加密阶段直接跳过配置字段处理
    4 、踩坑:pagehrlper 一次查询会同时发起一次 count 查询和一次数据查询,存在 mybatis 中 MetaObject 复用的情况,需特殊处理
    由于需要给多业务系统使用,所以原方案设计复杂,整体思路基本如此,可根据自身情况做调整
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3531 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 11:00 · PVG 19:00 · LAX 03:00 · JFK 06:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.