Шифрование данных в Fluent NHibernate

Если некоторые поля объекта должны храниться в базе в зашифрованом виде, хорошим решением будет создать шифрующий тип данных 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 может быть легко заменён на другой тип.