Java 项目新旧数据改造字段加密方案请教 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
PlanV
V2EX    Java

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

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

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

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

    项目涉及的架构: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     Solana     1366 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 41ms UTC 17:03 PVG 01:03 LAX 09:03 JFK 12:03
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86