gpt4 book ai didi

c# - 在 RavenDB 中加密和解密索引字段

转载 作者:行者123 更新时间:2023-11-30 17:13:57 25 4
gpt4 key购买 nike

我的应用程序要求我们需要加密索引字段。现在,加密/解密是在应用程序级别处理的。我想将加密过程从应用层移开,这样我就不必在模型或查询中手动加密数据。

我想用属性装饰模型以确定该字段是否应该加密。我正在考虑使用 IDocumentConversionListener 来处理文档之间的转换。这是处理这个问题的最佳地点吗?如果是这样,我如何只加密/解密复杂模型中具有属性的字段?以下是具有两个需要加密的字段的模型示例。

    public class User
{
public string Id { get; set; }
[EncryptAttribute]
public string Name { get; set; }
public Contact PhoneNumber { get; set; }
public class Contact
{
public string Type { get; set; }
[EncryptAttribute]
public string Value { get; set; }
}
}

public class SecureFieldListener : IDocumentConversionListener
{
public void EntityToDocument(object entity, RavenJObject document, RavenJObject metadata)
{

}
public void DocumentToEntity(object entity, RavenJObject document, RavenJObject metadata)
{

}
}

最佳答案

至于如何存储文件加密,看这里:http://daniellang.net/document-level-encryption-in-ravendb/

在高级别(在 lucene 之上)加密索引有很多严重的问题,我很确定你不想这样做。范围查询不起作用,排序会被破坏,全文搜索不可能等。

请注意,默认情况下,raven 将字段存储在 lucene 中,而没有字段存储。这意味着,虽然您可以在查询中使用它们,但您实际上无法将它们的值作为搜索结果检索回来。但是,据我所知,在非常安全的环境中,这可能还不够,因为可以以某种方式 提取它们。

因此,如果您确实需要如此高的安全性,我建议您选择以下选项之一:

  • 不要使用索引
  • 在文件系统级别加密 ravens 服务器中的索引文件夹(例如使用 TrueCrypt)
  • 扩展 RavenDB,使其使用您自己的 lucene FSDirectory 实现,该实现对所有磁盘 I/O 使用对称算法

关于c# - 在 RavenDB 中加密和解密索引字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9233377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com