Шифрование SQLite в Microsoft.EntityFrameWork

В настоящее время я пытаюсь зашифровать базу данных SQLite с помощью официального расширения SEE при использовании структуры сущностей Microsoft.

Я могу зашифровать базу данных при использовании ADO.NET. Однако возникает ошибка «Вы указали пароль в строке подключения, но собственная библиотека SQLite« e_sqlite3 »не поддерживает шифрование» при использовании работы с фреймами сущности.

Используемые пакеты Nuget:

[Microsoft.EntityFrameWork.Core Microsoft.EntityFrameWork.Core.SQLite SQLite.Encryption.Extension System.Data.SQLite.Core]

Подскажите, пожалуйста, как исправить эту ошибку с помощью официального расширения SEE?

CustomDBContext.cs:

      private readonly bool _created = false;

public CustomDbContext(DBContextOptions<CustomDbContext> options):base(options){

if(!_created)
{
_created = true;
Database.EnsureCreated();
}
}

public DbSet<SampleEntity> SampleEntities {get; set;}

Program.cs:

      static void Main(string[] args)
{
var services = new ServiceCollection();
ConfigureService(services);
using ServiceProvider provider = services.BuildServiceProvider();
provider.GetService<ICustomDBContext>();
}

private static void ConfigureServices(ServiceCollection services)
{
string password = Convert.ToHexString(Encoding.Default.GetBytes("aes256:test");

SQLiteCommand.Execute("PRAGMA activate_extensions='see-7bb07b8d471d642e'", SQLiteExecuteType.NonQuery,@"Data Source=c:\users\test.db");

SQLiteConnectionStringBuilder connectionStringBuilder = new(){
ConnectionString = @"Data Source=c:\users\test.db;Password="+password};

SQLiteConnection conn = new(connectionStringBuilder.ConnectionString);

connection.Open();
connection.ChangePassword(password);
services.AddDbContext<CustomDBContext>(options => options.UseSqlite(connection));
}

1 ответ

Чтобы использовать официальное расширение SQLite для шифрования, выберите структуру сущностей до EF6, поскольку библиотека System.Data.SQLite поддерживает только до EF6, а для ядра EF нет прямой поддержки.

Если нам все еще нужно использовать ядро ​​Entity Framework, мы также можем рассмотреть другие варианты, такие как шифрование с использованием SQLCipher, которое поддерживает ядро ​​EF.

Другие вопросы по тегам