Я только учусь использовать SQLite, и мне было любопытно, если это возможно:
Шифрование файла базы данных?
Пароль защищает открытие базы данных?
PS. Я знаю, что существует это «Расширение шифрования SQLite (SEE)», но согласно документации «SEE - это лицензионное программное обеспечение…» и «Стоимость бессрочной лицензии на исходный код для SEE составляет 2000 долларов США».
Ответы:
SQLite имеет встроенные хуки для шифрования, которые не используются в обычном выпуске, но вот несколько реализаций, которые я знаю:
SEE и SQLiteCrypt требуют покупки лицензии.
Раскрытие: я создал botansqlite3.
источник
Вы можете защитить паролем БД SQLite3. В первый раз перед выполнением каких-либо операций установите пароль следующим образом.
тогда в следующий раз вы можете получить к нему доступ, как
Это не позволит любому редактору графического интерфейса просматривать ваши данные. Позже, если вы хотите изменить пароль, используйте
conn.ChangePassword("new_password");
Чтобы сбросить или удалить пароль, используйтеconn.ChangePassword(String.Empty);
источник
ChangePassword
используется? AES 128? RSA ..?SetPassword
метод (в настоящее время) кажется в основном бесполезным. Единственный способ заставитьSystem.Data.SQLite
библиотеку правильно применить пароль - это использоватьChangePassword
метод. ИспользуяSetPassword
( до вызоваOpen
метода, как того требует библиотека), я все еще мог открывать и редактировать БД в SQLiteStudio без какого-либо пароля. Только после того, как я использовалChangePassword
метод ( после вызоваOpen
метода), приложение пароля фактически "зависло".Библиотека .net System.Data.SQLite также обеспечивает шифрование.
источник
Вы можете получить
sqlite3.dll
файл с поддержкой шифрования на http://system.data.sqlite.org/ .1 - Перейдите по адресу http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki и загрузите один из пакетов. Версия .NET здесь неактуальна.
2 - Извлечь
SQLite.Interop.dll
из пакета и переименовать вsqlite3.dll
. Эта DLL-библиотека поддерживает шифрование с помощью незашифрованных паролей или ключей шифрования.Упомянутый файл является нативным и НЕ требует .NET Framework. Может потребоваться среда выполнения Visual C ++ в зависимости от загруженного пакета.
ОБНОВИТЬ
Это пакет, который я скачал для 32-разрядной разработки: http://system.data.sqlite.org/blobs/1.0.94.0/sqlite-netFx40-static-binary-Win32-2010-1.0.94.0.zip
источник
.lib
чтобы я мог встроить в мой исполняемый файл. Я не мог иметь какие-либо DLL.lib
иdll
файл.Имейте в виду, что следующее не является заменой правильного решения безопасности.
Поработав с этим в течение четырех дней, я собрал решение, использующее только пакет System.Data.SQLite с открытым исходным кодом от NuGet. Я не знаю, какую защиту это обеспечивает. Я использую его только для собственного курса обучения. Это создаст БД, зашифрует ее, создаст таблицу и добавит данные.
При желании вы можете удалить
conn.SetPassword(passwordBytes);
и заменить его на то,conn.ChangePassword("password");
что нужно разместить после,conn.Open();
а не перед. Тогда вам не понадобится метод GetBytes.Чтобы расшифровать, нужно просто ввести пароль в строку подключения перед вызовом open.
источник
"I think I saw 128 bit somewhere"
- это очень плохое утверждение, если вы планируете заниматься шифрованием. Эмпирическое правило заключается в том, что вы никогда не делаете это сами, если не понимаете этого. В противном случае вам лучше не использовать его вообще.Вы всегда можете зашифровать данные на стороне клиента. Обратите внимание, что не все данные должны быть зашифрованы, поскольку они имеют проблемы с производительностью.
источник
Ну,
SEE
это дорого. ОднакоSQLite
имеет встроенный интерфейс для шифрования (пейджер). Это означает, что поверх существующего кода можно легко разработать какой-то механизм шифрования, не обязательноAES
. Ничего действительно. Пожалуйста, смотрите мой пост здесь: https://stackoverflow.com/a/49161716/9418360Вам необходимо определить SQLITE_HAS_CODEC = 1, чтобы включить шифрование пейджера. Пример кода ниже (
SQLite
первоисточник):Существует коммерческая версия в
C language
течениеSQLite
шифрования с помощью AES256 - он также может работать сPHP
, но он должен быть собран сPHP
иSQLite
расширением. Он дешифруетSQLite
файл базы данных на лету, содержимое файла всегда зашифровано. Очень полезно.http://www.iqx7.com/products/sqlite-encryption
источник
Вы можете использовать подпрограммы создания функций SQLite ( руководство по PHP ):
При вставке данных вы можете использовать функцию шифрования напрямую и ВСТАВИТЬ зашифрованные данные или использовать пользовательскую функцию и передавать незашифрованные данные:
При получении данных вы также можете использовать функцию поиска SQL:
источник