正文
一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间,用DES来举例,
13800138000
加密后的串
HE9T75xNx6c5yLmS5l4r6Q==
占24个字节。
轻则上百兆,重则上千兆,这样分分钟给应用程序整成Out of memory,这样做如果数据少只有几百、几千、几万条时是完全可以这样做的,但是数据量大就强烈不建议了。
沙雕二
我们再来看第二个做法,将密文数据映射一份明文映射表,然后模糊查询映射表来关联密文数据,what???!!!那我们为什么要对数据加密呢,直接不加密不是更好么!
我们既然对数据加密肯定是有安全诉求才会这样做,增加一个明文的映射表就违背了安全诉求,这样做既不安全也不方便完全是脱裤子放x,多此一举,强且不推荐。
常规做法
我们接下来看看常规的做法,也是最广泛使用的方法,此类方法及满足的数据安全性,又对查询友好。
-
在数据库实现加密算法函数,在模糊查询的时候使用
decode(key) like '%partial%
-
对密文数据进行分词组合,将分词组合的结果集分别进行加密,然后存储到扩展列,查询时通过
key like '%partial%'
常规一
在数据库中实现与程序一致的加解密算法,修改模糊查询条件,使用数据库加解密函数先解密再模糊查找,这样做的优点是实现成本低,开发使用成本低,只需要将以往的模糊查找稍微修改一下就可以实现,但是缺点也很明显,这样做无法利用数据库的索引来优化查询,甚至有一些数据库可能无法保证与程序实现一致的加解密算法,但是对于常规的加解密算法都可以保证与应用程序一致。