Хорошим подходом будет шифрование ваших данных при сохранении изменений в вашей базе данных и дешифрование при чтении ваших данных из базы данных.
Я разработал библиотеку для предоставления зашифрованных полей в контексте 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);
}
}
Результаты сохранения:
Надеюсь, это поможет.