Подтвердить что ты не робот

Шифровать базу данных SQLite в С#

Каков наилучший подход к шифрованию файла базы данных SQLite в .Net/С#? Я использую sqlite-dotnet2 wrapper.

Существуют такие инструменты, как Расширение шифрования SQLite и SQLite Crypt, но оба являются несвободными, а мой проект под GPL.

Наивный подход, который я думал использовать, заключался в том, чтобы позволить SQLite обрабатывать временный файл, затем зашифровывать его при выходе из программы и перезаписывать (обнулять) оригинал. Очевидным недостатком является то, что если программа сработает (и пока она запущена), доступна простая текстовая БД.

Есть ли лучший способ приблизиться к этому? Могу ли я передать зашифрованный поток в оболочку (вместо использования SQLiteConnection.CreateFile)?

[прав.] Этимология Это болванка статьи. Достаточно ли использовать параметр "Пароль" в строке подключения? Правильно ли будет зашифрован файл в этом случае (или это более слабая защита)?

4b9b3361

Ответ 1

Я рекомендую использовать оболочку System.Data.Sqlite, которая включает в себя шифрование. Он отлично работает, он прост в использовании и представляет собой полную реализацию ADO.Net. Вы можете получить обертку из https://system.data.sqlite.org, а разработчик описывает, как использовать шифрование на этом форуме по адресу: https://web.archive.org/web/20100207030625/http://sqlite.phxsoftware.com/forums/t/130.aspx. Подсказка - вы просто установили свойство пароля. Он также описывает, как он шифрует, используя API Microsoft Crypto в другом месте на форуме.

Ответ 2

Взгляните на:

http://zetetic.net/software/sqlcipher

Это открытый исходный код.

Вы также можете использовать код для wxsqlite3.

Ответ 3

Я бы попробовал http://code.google.com/p/csharp-sqlite/, он переписывает SQLite 3.6.16 на С# в соответствии с лицензией MIT. Полагаю, это будет легко настроить.

EDIT: Как упоминалось в примечании ниже, оно также поддерживает шифрование sqlcipher

ОБНОВЛЕНИЕ: Поскольку Google Code пошел только на чтение, проект переместился на его собственный веб-сайт https://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki

Ответ 4

Этот метод не специфичен для SQLite как таковой, но является общим предложением шифрования файлов.

(1) Используйте TrueCrypt (free/opensource) для создания зашифрованного файла-обертки. Этот файл должен быть больше ожидаемого максимального размера вашей базы данных.

(2) Когда вы монтируете этот файл, он появится как логический жесткий диск на вашем компьютере.

(3) Храните свои базы данных sqlite на этом логическом жестком диске.

Подключите диск, прежде чем вы будете обращаться к своей базе данных с помощью odbc/jdbc или любого другого метода.

Преимущество этого: даже если у кого-то есть доступ к вашему паролю базы данных, они не могут получить доступ к файлу, поскольку он зашифрован. Им понадобится ваш пароль Truecrypt, чтобы открыть его.