常规一:在数据库实现加密算法函数,在模糊查询的时候使用decode(key) like '%partial%

在数据库中实现与程序一致的加解密算法,修改模糊查询条件,使用数据库加解密函数先解密再模糊查找,这样做的优点是实现成本低,开发使用成本低,只需要将以往的模糊查找稍微修改一下就可以实现,但是缺点也很明显,这样做无法利用数据库的索引来优化查询,甚至有一些数据库可能无法保证与程序实现一致的加解密算法,但是对于常规的加解密算法都可以保证与应用程序一致。
如果对查询性能要求不是特别高、对数据安全性要求一般,可以使用常见的加解密算法比如说AES、DES之类的也是一个不错的选择。
如果公司有自己的算法实现,并且没有提供多端的算法实现,要么找个算法好的人去研究吃透补全多端实现,要么放弃使用这个办法。

常规二:对密文数据进行分词组合,将分词组合的结果集分别进行加密,然后存储到扩展列,查询时通过key like ‘%partial%’

对密文数据进行分词组合,将分词组合的结果集分别进行加密,然后存储到扩展列,查询时通过key like ‘%partial%’,这是一个比较划算的实现方法,我们先来分析一下它的实现思路。
先对字符进行固定长度的分组,将一个字段拆分为多个,比如说根据4位英文字符(半角),2个中文字符(全角)为一个检索条件,举个例子:
ningyu1使用4个字符为一组的加密方式,第一组ning ,第二组ingy ,第三组ngyu ,第四组gyu1 … 依次类推。
如果需要检索所有包含检索条件4个字符的数据比如:ingy ,加密字符后通过 key like “%partial%” 查库。

大家是否都对接过 淘宝、拼多多、JD他们的api,他们对平台订单数据中的用户敏感数据就是加密的同时支持模糊查询,使用就是这个方法,下面我整理了几家电商平台的密文字段检索方案的说明,感兴趣的可以查看下面链接

淘宝密文字段检索方案:https://open.taobao.com/docV3.htm?docId=106213&docType=1

阿里巴巴文字段检索方案:https://jaq-doc.alibaba.com/docs/doc.htm?treeId=1&articleId=106213&docType=1

拼多多密文字段检索方案:https://open.pinduoduo.com/application/document/browse?idStr=3407B605226E77F2

京东密文字段检索方案:https://jos.jd.com/commondoc?listId=345

ps. 基本上都是一样的,果然都是互相抄袭,连加密后的数据格式都一致。

这个方法优点就是实现起来不算复杂,使用起来也较为简单,算是一个折中的做法,因为会有扩展字段存储成本会有升高,但是可利用数据库索引优化查询速度,推荐使用这个方法。

超神做法

设计一个有序的、非不可逆的、密文长度不能增长过快的算法,即如姓名:“张大铁”,用超神做法加密后成为“DQ21aTz//oe9qT2Xje//1tTcddQ”,我们想检索姓名中含有“大铁”的人的记录,即可只加密“大铁”为oe9qT2Xje//1tTcddQ然后搜索即可。