Шифрование данных на уровне данных с ASP.NET Core Entity Framework - PullRequest
0 голосов
/ 13 февраля 2019

В настоящее время я разрабатываю веб-приложение, в котором данные должны храниться в зашифрованном виде.

Используемые плановые технологии:

ASP.NET Core API ASP.NET Core Entity Framework MS SQL Server 2012любой веб-интерфейс. Из-за спецификации нам необходимо хранить все данные, зашифрованные в базе данных.

Это было бы хорошим подходом для достижения этой цели, но при этом позволяло бы использовать Entity Framework & LINQ, поэтому разработчик делает это.не нужно заботиться о шифровании.

Возможно ли зашифровать всю базу данных?

1 Ответ

0 голосов
/ 27 марта 2019

Хорошим подходом будет шифрование ваших данных при сохранении изменений в вашей базе данных и дешифрование при чтении ваших данных из базы данных.

Я разработал библиотеку для предоставления зашифрованных полей в контексте Entity Framework Core.

Вы можете использовать мой EntityFrameworkCore.DataEncryption плагин для шифрования ваших строковых полей при сохранении изменений с использованием встроенного или пользовательского поставщика шифрования.На самом деле, был разработан только AesProvider.

Чтобы использовать его, просто добавьте атрибут [Encrypted] к вашим строковым свойствам вашей Модели, а затем переопределите метод OnModelCreating() в вашем классе DbContext,а затем вызвать modelBuilder.UseEncryption(...), передав ему провайдер шифрования (AesProvider или любой класс, который наследуется от IEncryptionProvider.)

public class UserEntity
{
    public int Id { get; set; }

    [Encrypted]
    public string Username { get; set; }

    [Encrypted]
    public string Password { get; set; }

    public int Age { get; set; }
}

public class DatabaseContext : DbContext
{
    // Get key and IV from a Base64String or any other ways.
    // You can generate a key and IV using "AesProvider.GenerateKey()"
    private readonly byte[] _encryptionKey = ...; 
    private readonly byte[] _encryptionIV = ...;
    private readonly IEncryptionProvider _provider;

    public DbSet<UserEntity> Users { get; set; }

    public DatabaseContext(DbContextOptions options)
        : base(options)
    {
        this._provider = new AesProvider(this._encryptionKey, this._encryptionIV);
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.UseEncryption(this._provider);
    }
}

Результаты сохранения:

encryption

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...