实现数据库中加密字段的模糊检索思路

对于涉个人敏感的信息如手机号,身份证号,通常存入数据库时采用各类加密存储,以保证数据的安全性,在满足安全的同时,也带来了相关问题;

比如,前端业务要对手机号模糊检索,输入手机号中的几位便可以查询。这时对后台接口来说就存在较大的检索难度甚至无法检索。

诸如,把数据库数据先解密为明文在对比数据检索,或者把数据返给前端,让前端做数据对比与检索,都不是一个好的解决思路,结合具体业务细节上考虑的更多。

因此,通过查阅一些资料,总结如下思路:

以手机号为列

1、敏感数据正常加密存储。

2、将手机号(13901234567)进行分组,4位一组,分了8组,(1390,3901,9012,0123,1234,2345,3456,4567)

3、对每组数据分别进行加密(加密算法根据实际情况而定)

得到8组密文后,将所有密文拼接为一个字符串:F6u2TlqbcZHgNPOXNsQbkDc2I8ucMbfSNJy0rZtNufrjDUs300hyTUM0tBV0BlHbWiF8JTbSVp6l2P0hR6GcxFpj35Z6C0w2y6RuMWLboTBmkpgrSRJ9BLgQYzqGCx7jv6z4H3ZrdxePOcei6Eu1vr5d6rHuOi06jg3qSHwfXi6QzCw0

这个新的密文字符串就是手机号的模糊检索字段,需要存入新的字段(smphone)

4、当前端对手机号检索时,需要输入不少于4位号码,比如检索条件为0123,将0123加密后,做为sql语句的条件   like %smphone%

如果输入01234 大于4位的号码,先将其分组,0123,1234,并将分组后的字符串分别加密,然后拼接在一起,做为sql语句的条件   like %smphone%

以此类推,实现对手机号的模糊检索。

5、问题:为什么要进行4位分组?因为过小分组无意义,4位分组的好处,可以在前端要求输入检索的手机号码不能少于4位。

如果前端要求可以输入3位号码吗?可以的,如果输入3位号码,可以在后面+1位,分别为0-9,分为10组,进行检索。

搜素条件可以输入更少的号码吗?不可以或不建议了,以目前4位分组来说,不能少于3位号码进行搜索了,分组太多,效率过低。但可以大于4位,4到11位都可以检索。

如果采用目前的思路,会不会影响效率?基本不会。影响了数据库增加了1个字段,需要将手机号分组 加密,如果写好工具类,这些效率与存储损失可以忽略,因为你的核心目的是如何实现加密字段的模糊检索。

其他涉敏感的数据可以采用此方法吗?手机号,身份证号,毕业证号等等证件编号类的 应该都可以解决。

综上,希望这个思路可以供大家解决针对加密字段的模糊搜索,是一个闭环的解决思路。

MyBatis-Plus提供了数据安全保护功能,其包括字段加密和解密。在使用加密功能时,数据库存储的字段内容会以十六进制格式的密文形式保存。对于条件查询,如果不对密文进行处理,将无法匹配出想要的结果。为了实现条件查询,可以使用SQL的AES_DECRYPT函数对密文进行解密,并进行匹配。需要注意的是,SQL的解密函数只有AES_DECRYPT,因此只适用于AES加密算法。\[3\] 在具体的代码实现,可以使用MyBatis-Plus的QueryWrapper来构建查询条件。在查询方法,可以通过调用AES_DECRYPT函数对加密字段进行解密,并与目标值进行匹配。例如,在getAll方法,可以使用QueryWrapper的like方法来进行模糊查询,同时使用AES_DECRYPT函数对加密字段进行解密,并与目标值进行匹配。最后,返回匹配的结果列表。\[1\] 需要注意的是,加密后的字段内容需要与数据库存储的密文进行匹配,而不是与明文进行匹配。因此,在进行条件查询时,需要对密文进行解密后再进行匹配。\[2\] 总结起来,MyBatis-Plus的加密功能可以保护数据的安全性,通过使用AES_DECRYPT函数对密文进行解密,可以实现条件查询。\[3\] #### 引用[.reference_title] - *1* *3* [MyBatis-Plus加密字段查询(密文检索)](https://blog.csdn.net/tongxin_tongmeng/article/details/128733039)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [MyBatis-Plus数据安全保护(加密解密)](https://blog.csdn.net/tongxin_tongmeng/article/details/128685399)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值