使用AES256编译System.Data.Sqlite

时间:2018-02-01 17:34:02

标签: encryption build sqlite msbuild system.data.sqlite

我在编译sqlite,system.data.sqlite以及xerial的JDBC时试图获得加密的sqlite文件。根据我的理解, system.data.sqlite 使用RC4加密,而SQLCipher / Rijndael / wxSqlite可以使用AES256。

Using this library,可以轻松编译用于AES256加密的Windows二进制文件 This library通过合并Xerial's JDBC提供wxsqlite3's improvements,它看起来实际上是基于上述(Rijndael的)库。

由于上述两个库接近同一个,并且使用相同的加密,因此它们是兼容的。我有一个带有加密支持JDBC的Java项目,我有一个已编译的sqlite3.dll和sqlite3shell.exe,它允许我使用命令行来加密,读取,写入等数据库。此sqlite DLL和shell与使用JDBC创建的数据库兼容。

我有点迷失的地方是让system.data.sqlite使用AES256。我需要使用这个库,因为它提供了使用Entity Framework和LINQ的能力。我曾经以为这不是一项艰巨的任务,但在这个问题上,我过去几天一直在撞墙。我有加密就绪的sqlite3 dll,如何将其与system.data.sqlite合并?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果您的目标是.NET标准4.6.1+或Core,您可能需要尝试使用Microsoft.Data.Sqlite。这可以通过简单地添加2个Nuget包来为您提供AES256加密。顺便说一句,有付费选项来获得AES256编译的System.Data.Sqlite。其中一些列在此answer

如果您的项目当前正在使用System.Data.Sqlite,那么转换将涉及一些搜索/替换方法&类名,其中大部分是大写的差异。例如," SQLiteDataReader"成为" SqliteDataReader。"

另一个区别是Microsoft.Data.Sqlite对列命名很严格。例如,一个引用名为" DateListed"的列的命令。如果数据库模式将该列作为" Datelisted。"

,则将失败

如果你想探索过渡安装2 nuget包:

Install-Package Microsoft.Data.Sqlite.Core
Install-Package SQLitePCLRaw.bundle_sqlcipher

设置SQLitePCL

SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_sqlcipher());
SQLitePCL.Batteries_V2.Init();
SQLitePCL.raw.FreezeProvider();

创建加密数据库

string error = string.Empty;
static SQLitePCL.sqlite3 sqlite
SQLitePCL.raw.sqlite3_open(dbPath, out sqlite);
SQLitePCL.raw.sqlite3_exec(sqlite, "PRAGMA key ='myPassword'", out error);
SQLitePCL.raw.sqlite3_close(sqlite);