【问题标题】:Lucene.NET encrypted full text searchLucene.NET 加密全文搜索
【发布时间】:2017-06-07 18:20:15
【问题描述】:

所以基本情况是我必须在 SQL Server 数据库中存储一些文本信息。问题是文本必须加密并且可搜索。 我对该主题进行了一些研究,似乎这还不可行(据我了解,这种类型的加密技术,同态加密还不够成熟,无法用于现实生活中的应用)。

我想出了一个主意,但我不确定它是否可行。有人可以建议吗?

所以我知道 Lucene.NET 可以用于全文搜索。我想做的是用 Lucene.NET 索引纯文本,存储索引而不是纯文本,将加密值存储在 SQL Server 中,然后搜索 Lucene 索引并从 Lucene 索引中返回记录的 ID ,从 SQL Server 读取该特定行,然后解密数据。

这可能吗?我可以用 Lucene 索引一些东西,然后不存储索引数据吗?

【问题讨论】:

    标签: .net sql-server encryption lucene.net


    【解决方案1】:

    不确定我是否理解您要求的细微差别...但听起来这些术语可以很简单,但需要对完整的字符串进行加密?

    如果是这样,我多次使用的模式是使用 Field.STORE.NO 对字段进行索引,然后将内容放入二进制字段中。我用它来创建一个文档存储,其中文档是类型化的结构化对象。定义要索引的属性,然后将对象作为压缩的 json 序列化为二进制字段。

    在您的情况下,二进制文件将是通过您需要的任何方式加密的字符串。

    如果文本使用 slop 查询(即“fred wilma”~5 = “fred ” 在“威尔玛”的 5 个术语内)。 “大部分”,因为不会有停用词。如果您不需要 slop,那么您可以不使用索引。

    稍加注意(可能是自定义分析器和查询解析器),您也可以对术语进行加密。

    【讨论】:

    • 感谢您的洞察力。我实际上不知道这些条款是否可以简单明了。当前的要求是我必须加密文件内容,但用户仍然必须能够在其中搜索。基本上我现在正在集思广益,我不确定简单的条款是否会成为法律问题。但是我需要支持的只是简单的 LIKE 样式的 SQL 查询,在这种情况下,我可以在将文本字段添加到文档时简单地指定 Field.TermVector.NO 吗?如果是这样,重构原始文本有多容易?
    • 真的取决于你关心什么。如果个别词是敏感的(客户、人名),那么就可以读出这些词。如果是短语,那么不是。只有每个文档中的单词集,没有排序。一种简单的方法是分别“加密”文本中的每个单词(而不是整个字符串),然后对其进行索引。然后空白分析器将正确标记。 (即不需要定制位)。您必须评估这家商店需要有多“安全”。
    • 感谢您的解释。同样,如果是短语或单词实际上是敏感的,我必须检查法律,但我也喜欢逐字加密而不是整个文本的解决方案。
    【解决方案2】:

    这并不容易。您所描述的内容很少在商业数据库中实现,尽管该领域有一些理论成果。我建议你去google scholar 并开始寻找有关该主题的论文。

    以下是一些帮助您入门的参考资料:

    【讨论】:

      猜你喜欢
      • 2010-10-04
      • 2010-10-02
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多