去年因为单位的网站要过等保评级,需要把数据库里的敏感信息都加密了。前几天又有需求,需要在表里加几个敏感字段。我就把加密、解密的代码抽象出来一个单独的工程,供大家参考。
去年在做加密、解密的时候参考了不少资料,因为是现在才开源的,之前参考过的资料都没法给出参考链接,在此表示感谢、抱歉。
源码 github 地址:https://github.com/fengsmith/database-encrypt 。
有些敏感字段,比如手机号、姓名、身份证、住址、邮箱等需要加密。万一数据库被拖库了,黑客拿到加密的数据也不会造成用户的关键信息泄密。
有些网站要做等保评级,数据库里的关键信息必须要加密。我们的网站就是因为要做等保评级,所以数据库中的敏感数据必须要加密。
orm 框架用的是 mybatis ,在数据插入前对数据进行加密,数据查询出来的时候再解密。底层代码统一做了这些事,上层的业务层不需要关注加密、解密。
具体就是利用了 mybatis 的 typeHandler ,在数据更新到数据库前对数据进行加密。在数据查询出来的时候再解密。具体设置细节参见 CustomUserMapper.xml 的相关配置。加密、解密的 handler 是 com.example.service.mybatis.EncryptTypeHandler 。
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;