Если некоторые поля объекта должны храниться в базе в зашифрованом виде, хорошим решением будет создать шифрующий тип данных NHibernate.
Я нашёл неплохой пример такого типа данных, и сделал рабочий пример его использования.
Мой код так же содержит пример Fluent NHibernate мэппинга и пример использования класса TripleDESCryptoServiceProvider.
Класс Blog имеет поля простых типов:
public class Blog
{
public virtual int Id { get; private set; }
public virtual string Title { get; set; }
public virtual bool IsPublished { get; set; }
public virtual int Rank { get; set; }
}
Класс отображения Fluent NHibernate будет выгядеть так:
public class BlogMap : ClassMap<Blog>
{
public BlogMap()
{
Id(x => x.Id);
Map(x => x.Title).CustomType(typeof(EncryptedType<string>));
Map(x => x.Rank).CustomType(typeof(EncryptedType<int>));
Map(x => x.IsPublished).CustomType(typeof(EncryptedType<bool>));
}
}
Тип EncryptedType выполняет всю работу по сериализации простого типа в байтовый массив и шифрованию.
Как видно из кода, тип EncryptedType может быть легко заменён на другой тип.