是否存在可基于密文校验源文本是否包含子串的加密算法?
符合需求的加密方案说明
你要找的这类加密能力属于**可搜索对称加密(Searchable Symmetric Encryption, SSE)**的子串匹配分支,现有成熟方案可以完全匹配你给出的调用逻辑。
核心实现逻辑
- 加密阶段
encrypt(src, key):
先提取源文本所有固定长度的n-gram(比如按你支持的最小搜索子串长度设置为3-gram/4-gram),用传入的私钥key对每个n-gram做带密钥的哈希计算,把所有哈希值填入布隆过滤器,再将完整源文本用AES等常规对称加密算法加密后和布隆过滤器绑定为最终密文enc。 - 查询阶段
isthere(enc, substr):
先把待查询的子串拆成和加密阶段同长度的n-gram,用同一个私钥计算对应哈希值,再到enc内的布隆过滤器中检查所有哈希值是否全部存在,全部存在即可判定源文本包含该子串,全程不需要解密完整源文本,也不需要定位子串位置。
适配场景调整建议
- 如果对误判零容忍,可以把布隆过滤器替换为加密的后缀数组索引,只是存储开销会比布隆过滤器方案高3~5倍。
- 如果需要支持无私钥的第三方查询,可以改用公钥可搜索加密的子串扩展方案,但性能会比SSE低一个数量级,你的需求明确要求私钥才能查询,优先选SSE方案即可。
你给出的预期调用逻辑可以直接复用,不需要修改接口:
enc = encrypt(src, key) isthere(enc, substr)
内容的提问来源于stack exchange,提问作者horart
相关产品推荐
相关产品推荐

