我的应用程序要求我们需要加密索引字段。现在,加密/解密在应用程序级别处理。我想将加密过程从应用程序层移开,因此我不必手动加密模型或查询中的数据。
我想用属性修饰模型,以确定该字段是否应加密。我正在寻找使用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)
{
}
}
答案 0 :(得分:2)
关于如何存储加密的文档,请查看此处:http://daniellang.net/document-level-encryption-in-ravendb/
在高级别(高于lucene)加密索引有很多严重的问题,我很确定你不想这样做。范围查询不起作用,订单会被破坏,全文搜索不可能等等。
请注意,默认情况下,raven会在没有字段存储的情况下在lucene中存储字段。这意味着,虽然您可以在查询中使用它们,但您实际上无法将其值作为搜索结果检索回来。但是,据我所知,在非常安全的环境中,这可能还不够,因为有可能以某种方式提取它们。
因此,如果您确实需要如此高的安全性,我建议您选择以下选项之一: