Компиляция System.Data.Sqlite с AES256
Я по колено в компиляции для sqlite, system.data.sqlite и JDBC от xerial, пытающихся получить зашифрованный файл sqlite, работающий через все три. Насколько я понимаю, system.data.sqlite использует шифрование RC4, а SQLCipher/Rijndael/wxSqlite может использовать AES256.
Используя эту библиотеку, можно легко скомпилировать двоичные файлы Windows для шифрования AES256.
Эта библиотека предлагает JDBC от Xerial, включив улучшения wxsqlite3, которые, как она выглядит, на самом деле основаны на вышеуказанной (Rijndael's) библиотеке.
Поскольку две вышеупомянутые библиотеки близки к одному и тому же и используют одинаковое шифрование, они были совместимы. У меня есть работающий проект Java с JDBC, поддерживающим шифрование, и у меня есть скомпилированные sqlite3.dll и sqlite3shell.exe, которые позволяют мне использовать командную строку для шифрования, чтения, записи и т. Д. Баз данных. Эта dll и оболочка sqlite совместимы с базами данных, созданными с помощью JDBC.
Я немного растерялся, когда заставляю system.data.sqlite работать с AES256. Мне нужно использовать эту библиотеку, поскольку она дает мне возможность использовать Entity Framework и LINQ. Я думал, что это не будет такой трудной задачей, но я врезался в стену в течение последних нескольких дней по этому вопросу. У меня есть готовая к шифрованию dll sqlite3, как мне объединить это с system.data.sqlite?
Большое спасибо за любую помощь.
1 ответ
Если вы ориентируетесь на стандарт.NET 4.6.1+ или Core, вы можете попробовать Microsoft.Data.Sqlite. Это может дать вам шифрование AES256, просто добавив 2 пакета Nuget. Кстати, есть платные опции, чтобы получить скомпилированный AES256 System.Data.Sqlite. Некоторые из них перечислены в этом ответе.
Если в вашем проекте в настоящее время используется 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);