
聊聊 Sharding-JDBC 数据脱敏(五)
现在使用自定义SHA256加密器对密码这个列进行加密,分为如下步骤:
1.声明加密器
声明很简单,配置如下:
2.逻辑列配置加密器
只需要将加密器的名字改成上面声明的encryptor_sha256即可,配置如下:
至此,配置成功了,自己去演示看一下吧,这里就不再细说了。
2. QueryAssistedEncryptor 自定义实现
下面通过Base64加密算法自定义实现一个QueryAssistedEncryptor加密器,如下:
需要注意以下两点:
- queryAssistedEncrypt():该方法在插入、更新逻辑列设置辅助查询列值、逻辑列作为where查询条件时会被调用对辅助查询列加密
- decrypt():这里的Base64是可逆的加密算法,因此只需要对其解密,并且剔除变动因子则为明文
同样的也需要在resource/META-INF/services目录中新建一个org.apache.shardingsphere.encrypt.strategy.spi.Encryptor文件,内容如下:
com.java.family.shardingjdbc003.encryptor.Base64AssistedEncryptor
配置也很简单,同样分为两步,如下:
1.声明加密器
配置如下:
2.逻辑列配置加密器
只需要将加密器的名字改成上面声明的encryptor_base64_assisted即可,配置如下:
唯一不同的就是多了一个assistedQueryColumn辅助查询列的配置。
好了,上述配置好了以后就可以进行单元测试了,插入数据结果:
可以看到mobile这个字段的值都是不同的,但是mobile_data这个辅助查询列都是相同的,因为辅助查询列并未使用变动因子进行加密。
关于查询如果涉及到mobile的条件查询,那么将会调用queryAssistedEncrypt()方法加密后根据辅助查询mobile_data列进行查询,SQL如下图:
“源码已经上传GitHub,关注公众号:码猿技术专栏,回复关键词:9534 获取!”
总结
本文介绍了如何利用Sharding-JDBC 进行数据脱敏以及如何自定义加密器,文中涉及的案例代码都已经提交GitHub。
文章转自公众号:码猿技术专栏
