尝试在 UWP 上加密 SQLite 数据库时出现问题

Lea*_*der 5 c# sqlite encryption uwp

我在尝试加密 SQLite 数据库时遇到问题。到目前为止,我已经尝试了很多方法,但似乎都不起作用。

  • 最初我使用了SQLiteConnection.SetPassword()提供的(不受支持的)方法System.Data.SQLite,但是一段时间以来,该方法已从System.Data.SQLite包中删除。尝试采用较旧的 SQLite 版本很困难,因为 UWP 是 UAP 而不是 .NET Framework。
  • 因此,我已转向Microsoft.Data.Sqlite.Core并使用文档来安装SQLitePCLRaw.bundle_e_sqlcipher包并调用SQLitePCL.Batteries_V2.Init()SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provided_e_sqlcipher())。那么执行查询PRAGMA KEY = 'password'不会加密数据库文件。
  • 我也看到过人们使用的帖子SQLitePCLRaw.bundle_sqlcipher,但...e_sqlcipher在这种情况下却...V2.Init()不起作用。
  • 我也研究过使用sqlite-net-sqlcipher,但是执行SQLiteConnection.Query<int>("PRAGMA key = 'password'");也不加密数据库。当尝试使用查询数据库时,key: "password"将导致The file is no database错误,表示数据库缺少密码。

如何加密 UWP 的 SQLite 数据库,最好使用,Microsoft.Data.Sqlite但其他选项也可以。
我主要也在寻找一种免费的方式来实现这一目标,因为 900 美元对于我正在从事的项目来说远远超出了预算。

Lea*_*der 3

尽管我没有对列出的每个包进行测试,但我找到了问题的答案:

首先,我按照这个问题的答案中的说明进行操作。然后,我没有尝试使用PRAGMA key = 'password'现有数据库,而是创建了一个key = 'password'SQLiteConnectionString构造函数中指定的新数据库。

这为我创建了一个新的、已经加密的数据库。

编辑:我现在也用Microsoft.Data.Sqlite.Coreand进行了测试SQLitePCLRaw.bundle_e_sqlcipher,结果发现,还创建了一个新数据库,并结合指定Password = 'password',例如SqliteConnectionStringBuilder将创建一个加密的新数据库。

我在这里发布了一个带有代码的示例项目