mybatis 数据库字段加密方案

去年因为单位的网站要过等保评级,需要把数据库里的敏感信息都加密了。前几天又有需求,需要在表里加几个敏感字段。我就把加密、解密的代码抽象出来一个单独的工程,供大家参考。

去年在做加密、解密的时候参考了不少资料,因为是现在才开源的,之前参考过的资料都没法给出参考链接,在此表示感谢、抱歉。

源码 github 地址:https://github.com/fengsmith/database-encrypt

1. 数据库字段加密的需求:

有些敏感字段,比如手机号、姓名、身份证、住址、邮箱等需要加密。万一数据库被拖库了,黑客拿到加密的数据也不会造成用户的关键信息泄密。

有些网站要做等保评级,数据库里的关键信息必须要加密。我们的网站就是因为要做等保评级,所以数据库中的敏感数据必须要加密。

2. 加密、解密原理。

orm 框架用的是 mybatis ,在数据插入前对数据进行加密,数据查询出来的时候再解密。底层代码统一做了这些事,上层的业务层不需要关注加密、解密。

具体就是利用了 mybatis 的 typeHandler ,在数据更新到数据库前对数据进行加密。在数据查询出来的时候再解密。具体设置细节参见 CustomUserMapper.xml 的相关配置。加密、解密的 handler 是 com.example.service.mybatis.EncryptTypeHandler 。

3. 如果是用 mybatis generator 自动生成相关数据库访问代码的话,参见 database-encrypt/dao/src/main/resources/generatorConfig.xml 。需要加、解密的列需要增加 然后指定 typeHandler 来处理加、解密。

4. 如果是想在自己写的 sql 中进行加密、解密,可以参见 database-encrypt/dao/src/main/resources/mybatis/manual/CustomUserMapper.xml 。主要还是在插入/更新到数据库前对需要加密的字段进行处理,在查询后再对需要解密的字段进行解密。

5. demo 用例在 com.example.service.UserServiceTest 。

6. 需要数据库的用户名、密码、ip 等。包括 generatorConfig.xml、 application.properties 。

7. 修改加密、解密 key 。在 com.example.service.mybatis.AESUtils 中的第 76 行。

8. user 建表 sql :


CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nick_name` varchar(45) COLLATE utf8mb4_unicode_ci NOT NULL,
  `real_name` varchar(45) COLLATE utf8mb4_unicode_ci NOT NULL,
  `phone` varchar(45) COLLATE utf8mb4_unicode_ci NOT NULL,
  `age` int(11) NOT NULL,
  `crate_date` datetime NOT NULL,
  `update_date` datetime NOT NULL,
  PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值