2009-08-11 26 views
12

Jakie jest najlepsze podejście do szyfrowania pliku bazy danych SQLite w .Net/C#? Używam otoki sqlite-dotnet2.Szyfrowanie bazy danych SQLite w C#

Istnieją narzędzia, takie jak SQLite Encryption Extension i SQLite Crypt, ale oba są niewiążące, podczas gdy mój projekt jest na licencji GPL.

To naiwne podejście, które myślałem o użyciu, pozwoliło SQLite obsłużyć plik tymczasowy, a następnie zaszyfrować go przy wyjściu programu i nadpisać (wyzerować) oryginał. Oczywistą wadą jest to, że jeśli program ulega awarii (i jest uruchomiony), dostępny jest zwykły tekstowy DB.

Czy istnieje lepszy sposób podejścia do tego? Czy mogę przekazać zaszyfrowany strumień do opakowania (zamiast używać SQLiteConnection.CreateFile)?

[edytuj] Może to przesadzam. Czy wystarczy użyć opcji Hasło w ciągu połączenia? Czy plik byłby w tym przypadku poprawnie zaszyfrowany (czy też jest to słabsza ochrona)?

+1

> Są narzędzia takie jak SQLite Encryption Extension i SQLite Crypt, ale oba są niewolne, podczas gdy mój projekt jest na licencji GPL. Jeszcze nie próbowaliśmy używać go z .NET, ale pracuję w zespole programistycznym dla [SQLCipher] [1], który jest w zasadzie bezpłatną i nieobciążoną wersją SQLite, która zapewnia przezroczyste szyfrowanie bazy danych. Polecam go do użytku w ustawieniach aplikacji mobilnych i/lub autonomicznych, gdzie pożądany jest wbudowany db. [1]:.? Http://github.com/sjlombardo/sqlcipher –

+0

... i .NET wersja SQLCipher jest teraz produktem handlowym :( – Cocowalla

Odpowiedz

18

Polecam używanie opakowania System.Data.Sqlite, które zawiera szyfrowanie. Działa świetnie, jest łatwy w użyciu i jest kompletną implementacją ADO.Net. Możesz uzyskać opakowanie od https://system.data.sqlite.org, a programista opisuje, jak używać szyfrowania na tym forum pod adresem: https://web.archive.org/web/20100207030625/http://sqlite.phxsoftware.com/forums/t/130.aspx. Wskazówka - wystarczy ustawić właściwość hasła. Opisuje także, jak robi szyfrowanie za pomocą Microsoft Crypto API w innym miejscu na forum.

+1

Linki są podzielone można podać nową – Protocole

+1

Wygląda na to, że Robert Simpson porzucił witrynę phxsoftware, gdy kontrola oprogramowania została przeniesiona na http://system.data.sqlite.org w 2011 roku. Nie sądzę, aby stare strony forum były publikowane nigdzie indziej. –

+2

powyżej link http://web.archive.org/web/20130325100811/http://sqlite.phxsoftware.com/forums/t/130.aspx –

-1

Ta metoda nie jest specyficzna dla SQLite jako takiego, ale jest ogólną sugestią dotyczącą szyfrowania plików.

(1) Użyj TrueCrypt (free/opensource), aby utworzyć zaszyfrowany plik opakowania. Ten plik powinien być większy niż oczekiwany maksymalny rozmiar bazy danych.

(2) Po zamontowaniu tego pliku pojawi się on jako logiczny dysk twardy w komputerze.

(3) Zachowaj bazy danych sqlite na tym logicznym dysku twardym.

Zamontuj dysk przed uzyskaniem dostępu do bazy danych za pomocą odbc/jdbc lub dowolnej innej metody.

Zaletą takiego działania jest: Nawet jeśli ktoś ma dostęp do hasła do bazy danych, nie może uzyskać dostępu do pliku, ponieważ jest on zaszyfrowany. Będą potrzebować twojego hasła Truecrypt, aby je otworzyć.

+4

Jest to przydatna propozycja dla użytkownika lub administratora. nie jest tak pomocny przy włączaniu funkcji szyfrowania w programie. – dbkk

5

Chciałbym spróbować http://code.google.com/p/csharp-sqlite/, to przepisanie SQLite 3.6.16 w języku C#, w ramach licencji MIT. Przypuszczam, że łatwo będzie to poprawić.

EDIT: Jak wspomniano w poniższej notatki, to również wsparcie sqlcipher szyfrowania

UPDATE: Ponieważ Google Code poszedł tylko do odczytu projekt został przeniesiony do własnej strony internetowej https://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki

+1

C# -SQLite zawiera wbudowaną obsługę r pakiet sqlcipher; Kompilujesz go przy pomocy SQLITE_HAS_CODEC i aktywujesz je za pomocą polecenia PRAGMA hexkey = "0x0102030405060708090a0b0c0d0e0f10"; – Noah