我们知道加密后的数据对模糊查询不是很友好,本篇就针对加密数据模糊查询这个问题来展开讲一讲实现的思路,希望对大家有所启发。
为了数据安全我们在开发过程中经常会对重要的数据进行加密存储,常见的有:密码、手机号、电话号码、详细地址、银行卡号、信用卡验证码等信息,这些信息对加解密的要求也不一样,比如说密码我们需要加密存储,一般使用的都是不可逆的慢hash算法,慢hash算法可以避免暴力破解(典型的用时间换安全性)。
在检索时我们既不需要解密也不需要模糊查找,直接使用密文完全匹配,但是手机号就不能这样做,因为手机号我们要查看原信息,并且对手机号还需要支持模糊查找,因此我们今天就针对可逆加解密的数据支持模糊查询来看看有哪些实现方式。
在网上随便搜索了一下,关于《加密后的模糊查询》 的帖子很多,顺便整理了一下实现的方法,不得不说很多都是不靠谱的做法,甚至有一些沙雕做法,接下来我们就对这些做法来讲讲实现思路和优劣性。
如何对加密后的数据进行模糊查询
我整理了一下对加密的数据模糊查询大致分为三类做法,如下所示:
-
沙雕做法(不动脑思考直男的思路,只管实现功能从不深入思考问题)
-
常规做法(思考了查询性能问题,也会使用一些存储空间换性能等做法)
-
超神做法(比较高端的做法从算法层面上思考)
我们就对这三种实现方法一一来讲讲实现思路和优劣性,首先我们先看沙雕做法。
沙雕做法
-
将所有数据加载到内存中进行解密,解密后通过程序算法来模糊匹配
-
将密文