我正在深入研究 sqlite、system.data.sqlite 和 xerial 的 JDBC 的编译,试图让加密的 sqlite 文件在这三个文件中工作。据我了解,系统数据.sqlite使用RC4加密,SQLCipher/Rijndael/wxSqlite可以使用AES256。
使用这个库,可以轻松编译 Windows 二进制文件以进行 AES256 加密。
这个图书馆 offers Xerial 的 JDBC通过合并wxsqlite3 的改进,看起来实际上是基于上面的(Rijndael 的)库。
由于上述两个库接近一模一样,并且使用相同的加密方式,因此它们已经兼容。我有一个支持加密的 JDBC 的工作 Java 项目,并且有一个已编译的 sqlite3.dll 和 sqlite3shell.exe,它们允许我使用命令行来加密、读取、写入等数据库。该 sqlite dll 和 shell 与使用 JDBC 创建的数据库兼容。
我有点迷失的地方是系统数据.sqlite使用 AES256。我需要使用这个库,因为它使我能够使用实体框架和 LINQ。我本以为这不会是一项艰巨的任务,但在过去的几天里,我一直在这个问题上陷入困境。我有加密就绪的 sqlite3 dll,如何将其与 system.data.sqlite 合并?
非常感谢您的帮助。
如果您的目标是 .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
Setup 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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)