在日常的开发工作中,为了数据安全,我们经常会对重要的数据进行加密,比如客户手机号、身份证号、银行卡号等。今天我们就来探讨下,加密后的手机号如何进行模糊匹配以及精准匹配。
一、精准匹配
在了解手机号的精准匹配之前,先为大家介绍两种对称加密算法 ——AES(Advanced Encryption Standard)和 DES(Data Encryption Standard)。对称加密算法的特点是加密和解密使用相同的密钥。在我们的业务场景中,数据库表存储的是已经加密后的手机号,当进行手机号精准匹配时,需要先将待匹配的手机号加密,然后再与存储的值进行对比。
1. AES算法
AES 是一种广泛使用的对称加密算法,它具有以下特点:
- 密钥长度灵活:支持 128 位、192 位和 256 位密钥长度。例如,使用 128 位密钥时,其加密强度很高。它基于字节替代、行移位、列混合和轮密钥加等操作构成的轮函数,经过多轮迭代对数据进行加密(后续有时间了可以详解下该算法,本文还是以应用为主)。
- 安全性高:能有效抵抗多种密码分析攻击。在现代安全环境下,对于保护敏感信息非常可靠。
- 应用广泛:在网络通信、数据存储等众多领域都有大量应用。例如在 SSL/TLS 协议中保障数据传输安全, 是目前应用最广泛的对称加密算法。
以下是Java代码示例。
- 加密
public String encrypt(String value, String key, String iv) throws Exception {
// key表示16字节的密钥
Cipher cipher = Cipher.getInstance("AES");
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "AES");
// iv表示16字节的初始化向量
IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes(<