加密数据的模糊查询

密文检索的功能实现是根据4位英文字符(半角),2个中文字符(全角)为一个检索条件。
将一个字段拆分为多个,
比如:taobao123
使用4个字符为一组的加密方式。
第一组 taob ,第二组aoba ,第三组obao ,第四组 bao1 … 依次类推
如果需要检索 所有包含 检索条件4个字符的数据 比如:aoba ,加密字符后通过key like “%partial%” 查库。 

原理解释

  1. 分组规则

    • 英文字符:4个字符为一组
    • 中文字符:2个字符为一组
  2. 滑动窗口:每次向后移动一个字符,形成新的分组

  3. 存储方式:每个分组都需要单独加密存储,以支持模糊查询

具体示例

  1. 英文字符示例
原文:taobao123

分组过程:
taob (第1组)
aoba (第2组)
obao (第3组)
bao1 (第4组)
ao12 (第5组)
o123 (第6组)
  1. 中文字符示例
原文:淘宝网店

分组过程:
淘宝 (第1组)
宝网 (第2组)
网店 (第3组)

数据库实现示例

-- 创建存储加密分组的表
CREATE TABLE encrypted_data (
    id INT PRIMARY KEY,
    original_text VARCHAR(255),  -- 原始文本
    encrypted_group VARCHAR(255), -- 加密后的分组
    group_position INT           -- 分组位置
);

-- 插入数据示例(伪代码)
INSERT INTO encrypted_data VALUES
(1, 'taobao123', ENCRYPT('taob'), 1),
(2, 'taobao123', ENCRYPT('aoba'), 2),
(3, 'taobao123', ENCRYPT('obao'), 3),
(4, 'taobao123', ENCRYPT('bao1'), 4),
(5, 'taobao123', ENCRYPT('ao12'), 5),
(6, 'taobao123', ENCRYPT('o123'), 6);

-- 查询示例(查找包含'aoba'的记录)
SELECT DISTINCT original_text 
FROM encrypted_data 
WHERE encrypted_group LIKE CONCAT('%', ENCRYPT('aoba'), '%');

注意事项

  1. 存储空间

    • 原文长度为n的文本,会产生(n-3)个分组(对于4字符一组的情况)
    • 每个分组都需要加密存储,导致存储空间显著增加
  2. 性能影响

    • 插入数据时需要生成多个分组并加密
    • 查询时需要对输入进行加密后再模糊匹配
    • 索引效率会受到影响
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值