Microsoft.EntityFrameWork 中的 SQLite 加密

如何解决Microsoft.EntityFrameWork 中的 SQLite 加密

我目前正在尝试在使用 Microsoft 实体框架时使用官方 SEE 扩展来加密 sqlite 数据库

我可以在使用 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));
}

解决方法

要使用官方 SQLite 扩展进行加密,请选择实体框架直到 EF6,因为 System.Data.SQLite 库只支持到 EF6,不直接支持 EF 核心。

如果我们仍然需要使用实体框架核心,那么我们也可以考虑使用其他选项,例如使用支持 EF 核心的 SQLCipher 进行加密。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?