项目背景
我们的甲方对数据的要求比较高,要求数据在数据库中是加密的,并且展示给用户是解密后的或者处理过的。
使用框架(忽略版本)
SpringBoot + MybatisPlus(Mybatis也可以)
比如说手机号这一列:
原数据:13000000000
数据库中展示:MTMwMDAwMDAwMDA=
页面中展示:130****0000
思路梳理
想要达到这个效果,也就是说我们入库之前要将数据加密,取出数据后要将数据解密.
首先,我们得先选择数据的加密算法.像MD5这种经典算法就没办法使用了,因为MD5无法还原,虽然保证数据在数据库中是以加密的形式体现,但是取出数据库,数据无法解密.这个问题就无法解决.
解决方案
此处我们给出的方案是使用以下加密算法,保证数据被加密后也可以进行解密,也完成了数据的加密的需求.
对称加密算法可以使用:DES 3DES AES RSA
加密算法的问题我们解决了,然后加密的方式我们需要确定一下.
方式一:在每次Select后 循环解密, 在每次Update前进行数据加密。
方式二:使用typehadler.一次性解决所有加密需要的地方.
第一种方法可以解决数据加密的方式,但是会线性增加代码量.每次我们查询或更新操作,都需要加一行解密或者加密的代码.
第二种方法就比较方便.
只要在Mybatis的xml文件中resultMap属性中指定typeHandler即可.或者你使用的是MybatisPlus 需要在Po对象中@TableField注解有一个属性值typeHandler.指定某个handler的类就可以了.
这样就完成了甲方的需求.而且不需要每次增加一行代码完成需求.