07
05月
2026
我们在做系统设计的时候,要考虑要把用户的隐私信息加密保存。
常见的对称加密算法有 AES、SM4、ChaCha20、3DES、DES、Blowfish、IDEA、RC5、RC6、Camellia等。
目前国际主流的对称加密算法是AES,国内主推的则是SM4。
如何对加密后的字符串做模糊查询呢?
比如:假设查询一起关键字,加密后的字符串是:U2FsdGVkX19eCv+xt2WkQb5auYo0ckyw。
上面生成的两个加密字符串差异看起来比较大,根本没办法直接通过SQL语句中的like关键字模糊查询。
那我们该怎么实现加密的手机号的模糊查询功能呢?
第一种:内存加载(基本弃用)
如果个人隐私数据非常多的话,应用服务器的内存不一定够用,可能会出现OOM问题。
还有另外一个问题是:数据一致性问题。
第二种 使用数据库函数
我们可以使用MySQL的DES_ENCRYPT函数加密,使用DES_DECRYPT函数解密
第三种 分段保存
我们可以将一个完整的字符串,拆分成多个小的字符串。
以手机号为例:18200256007,按每3位为一组,进行拆分,拆分后的字符串为:182,820,200,002,025,256,560,600,007,这9组数据。
然后建一张表:
当然这里为了数据量和关联性数据处理则涵盖到增加映射表,防止字段过多查询过慢,主键关联即可。
也可以通过对应数据模糊查询做:不同长度的业务映射表,增加查询效率。根据我这样的处理其实一百万数据左右的数据非常快。
大家一起学习进步