前几天,知识星球中有位小伙伴,问了我一个问题:加密的手机号如何模糊查询?
我们都知道,在做系统设计时,考虑到系统的安全性,需要对用户的一些个人隐私信息,比如:登录密码、身份证号、银行卡号、手机号等,做加密处理,防止用户的个人信息被泄露。
很早之前,CSDN遭遇了SQL注入,导致了600多万条明文保存的用户信息被泄。
因此,我们在做系统设计的时候,要考虑要把用户的隐私信息加密保存。
常见的对称加密算法有 AES、SM4、ChaCha20、3DES、DES、Blowfish、IDEA、RC5、RC6、Camellia等。
目前国际主流的对称加密算法是AES
,国内主推的则是SM4
。
无论是用哪种算法,加密前的字符串,和加密后的字符串,差别还是比较大的。
比如加密前的字符串:苏三说技术
,使用密钥:123
,生成加密后的字符串为:U2FsdGVkX1+q7g9npbydGL1HXzaZZ6uYYtXyug83jHA=
。
如何对加密后的字符串做模糊查询呢?
比如:假设查询苏三
关键字,加密后的字符串是:U2FsdGVkX19eCv+xt2WkQb5auYo0ckyw
。
上面生成的两个加密字符串差异看起来比较大,根本没办法直接通过SQL语句中的like关键字模糊查询。
那我们该怎么实现加密的手机号的模糊查询功能呢?
1 一次加载到内存
实现这个功能