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组数据。

然后建一张表:

当然这里为了数据量和关联性数据处理则涵盖到增加映射表,防止字段过多查询过慢,主键关联即可。

也可以通过对应数据模糊查询做:不同长度的业务映射表,增加查询效率。根据我这样的处理其实一百万数据左右的数据非常快。

大家一起学习进步



延伸阅读
  1. 英语单词学习第四天
  2. 学位英语作文1-停止污染水
发表评论