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

2023-05-16 16:26:33 +08:00
 PlanV

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

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

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

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

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

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

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

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

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

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

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

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

2. 历史数据新写个任务自己跑,才 2w 数据而已
Habyss
2023-05-16 17:26:34 +08:00
你贴的这个链接是个很好的解决方法呀, 查询构造器的话, 之后用的时候就手动转换一下呗, 涉及加解密字段的地方应该不会很多.
模糊查询的话, 如果不是`刚需`的话, 直接砍掉好了, 为了模糊查询而做的一些设计, 个人感觉大材小用了
Ufo666
2023-05-16 17:33:15 +08:00
hhhh 我去年也接到了工信部的通知,不得随意存储用户隐私信息,然后我就把用户名性别全删了,手机号用 aes 加密存储了,读取时解密,不知道行不行,因为到现在过了半年了都还没来审。如果我方案不行,求大佬立即踢醒我。
timepast
2023-05-16 17:49:47 +08:00
有查询需求吗?
aru
2023-05-16 19:43:28 +08:00
@Ufo666 aes(mobile+salt) 比较好一点点
linjiece543
2023-05-17 12:17:42 +08:00
说个题外话,盲猜跟去年上海数据泄露那个事相关
veike
2023-05-17 12:33:06 +08:00
为什么这个帖子讨论的人这么少,顶一下!
Wh1te
2023-05-17 13:38:56 +08:00
1 、用 Mybatis 拦截器,支持入参加密,返回值解密,可以参考这个项目: https://github.com/WhiteDG/mybatis-crypto
3 、两万多条数据写个刷数据的脚本执行应该也很快的。
yxisenx
2023-05-18 09:55:39 +08:00
typehandler +1, 注意旧数据处理就好了
HelloAmazingW
2023-05-21 21:47:32 +08:00
上个月搞过,数据库用 KMS 对敏感数据加解密,前端传过来的数据继承 Interceptor 调用 KMS 进行加解密。
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 复用的情况,需特殊处理
由于需要给多业务系统使用,所以原方案设计复杂,整体思路基本如此,可根据自身情况做调整

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/940460

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX