1. 数据库内解密再查(适合小量数据)
我们可以在数据库里实现跟程序一样的加密/解密算法,比如用 AES。查询时,就在 SQL 里用函数先解密再查,比如:

SELECT * FROMusersWHEREAES_DECRYPT(phone, 'your_key') LIKE'%1380%';

2. 分词加密 + 扩展列(强烈推荐)
核心思想就是:在原数据加密前,先把它分词,然后把每个分词分别加密,单独存下来,查的时候只查这些加密后的分词

public List<String> buildEncryptedIndex(String original, SecretKey key){
    List<String> tokens = new ArrayList<>();
    for (int i = 0; i < original.length() - 3; i++) {
        String sub = original.substring(i, i + 4);
        String encrypted = AESUtil.encrypt(sub, key);
        tokens.add(encrypted);
    }
    return tokens;
}

存进扩展字段 phone_index,用英文逗号拼接也行
查询时只要把用户搜索的“模糊字段”也加密一下:

String query = AESUtil.encrypt("1380", key);

然后在数据库里写:

SELECT * FROMusersWHERE phone_index LIKE'%query%';

也可以用 Elasticsearch 替代 MySQL 进行模糊查询,原理差不多:在 ES 索引里存分词后的加密结果,再用 term query 查就行了。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐