Właśnie uczę się obsługi SQLite i byłem ciekawy, czy to możliwe:
Szyfrowanie pliku bazy danych?
Ochrona hasłem otwierania bazy danych?
PS. Wiem, że istnieje to „Rozszerzenie szyfrowania SQLite (SEE)”, ale zgodnie z dokumentacją „SEE jest licencjonowanym oprogramowaniem…” oraz „Koszt wieczystej licencji na kod źródłowy dla SEE wynosi 2000 USD”.
Odpowiedzi:
SQLite ma wbudowane haki do szyfrowania, które nie są używane w normalnej dystrybucji, ale oto kilka implementacji, które znam:
SEE i SQLiteCrypt wymagają zakupu licencji.
Ujawnienie: stworzyłem botansqlite3.
źródło
Możesz zabezpieczyć hasłem SQLite3 DB. Po raz pierwszy przed wykonaniem jakichkolwiek operacji ustaw hasło w następujący sposób.
wtedy następnym razem będziesz mógł uzyskać do niego dostęp
To nie pozwoli żadnemu edytorowi GUI na przeglądanie Twoich danych. Później, jeśli chcesz zmienić hasło, użyj
conn.ChangePassword("new_password");
Aby zresetować lub usunąć hasło, użyjconn.ChangePassword(String.Empty);
źródło
ChangePassword
użyty? AES 128? RSA ..?SetPassword
metoda (w tej chwili) wydaje się w zasadzie bezużyteczna. Jedynym sposobem, w jaki udało mi się zmusićSystem.Data.SQLite
bibliotekę do prawidłowego zastosowania hasła, było użycieChangePassword
metody. UżywającSetPassword
( przed wywołaniemOpen
metody, jak najwyraźniej wymaga tego biblioteka), nadal mogłem otwierać i edytować bazę danych w SQLiteStudio bez hasła. Dopiero gdy użyłemChangePassword
metody ( po wywołaniuOpen
metody), aplikacja z hasłem faktycznie "utknęła".Biblioteka .net System.Data.SQLite zapewnia również szyfrowanie.
źródło
Możesz pobrać
sqlite3.dll
plik z obsługą szyfrowania ze strony http://system.data.sqlite.org/ .1 - Przejdź do http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki i pobierz jeden z pakietów. Wersja .NET nie ma tutaj znaczenia.
2 - Wyodrębnij
SQLite.Interop.dll
z pakietu i zmień jego nazwę nasqlite3.dll
. Ta biblioteka DLL obsługuje szyfrowanie za pomocą haseł w postaci zwykłego tekstu lub kluczy szyfrowania.Wspomniany plik jest natywny i NIE wymaga platformy .NET. W zależności od pobranego pakietu może wymagać środowiska uruchomieniowego Visual C ++.
AKTUALIZACJA
To jest pakiet, który pobrałem do programowania w wersji 32-bitowej: http://system.data.sqlite.org/blobs/1.0.94.0/sqlite-netFx40-static-binary-Win32-2010-1.0.94.0.zip
źródło
.lib
który mógłbym osadzić w moim pliku wykonywalnym. Nie mogłem mieć żadnych bibliotek dll.lib
idll
.Należy pamiętać, że poniższe informacje nie zastępują prawidłowego rozwiązania zabezpieczającego.
Po czterech dniach zabawy przygotowałem rozwiązanie wykorzystujące tylko pakiet System.Data.SQLite o otwartym kodzie źródłowym z NuGet. Nie wiem, jaką ochronę to zapewnia. Używam go tylko do własnego toku studiów. Spowoduje to utworzenie bazy danych, zaszyfrowanie jej, utworzenie tabeli i dodanie danych.
Opcjonalnie możesz go usunąć
conn.SetPassword(passwordBytes);
i zastąpić nim,conn.ChangePassword("password");
który ma być umieszczony poconn.Open();
zamiast przed. Wtedy nie będziesz potrzebować metody GetBytes.Aby odszyfrować, wystarczy umieścić hasło w ciągu połączenia przed wywołaniem do otwarcia.
źródło
"I think I saw 128 bit somewhere"
- to bardzo złe stwierdzenie, jeśli planujesz zająć się szyfrowaniem. Ogólna zasada jest taka, że nigdy nie robisz tego sam, jeśli tego nie rozumiesz. W przeciwnym razie lepiej go w ogóle nie używać.Zawsze możesz zaszyfrować dane po stronie klienta. Należy pamiętać, że nie wszystkie dane muszą być szyfrowane, ponieważ mają problemy z wydajnością.
źródło
Cóż,
SEE
jest drogi.SQLite
Ma jednak wbudowany interfejs do szyfrowania (Pager). Oznacza to, że poza istniejącym kodem można łatwo opracować jakiś mechanizm szyfrowania, ale nie musiAES
. Naprawdę wszystko. Zobacz mój post tutaj: https://stackoverflow.com/a/49161716/9418360Musisz zdefiniować SQLITE_HAS_CODEC = 1, aby włączyć szyfrowanie Pager. Przykładowy kod poniżej (oryginalne
SQLite
źródło):Dostępna jest wersja komercyjna
C language
doSQLite
szyfrowania przy użyciu AES256 - może również współpracowaćPHP
, ale wymaga kompilacjiPHP
iSQLite
rozszerzenia. Odszyfrowuje / szyfrujeSQLite
plik bazy danych w locie, zawartość pliku jest zawsze szyfrowana. Bardzo przydatne.http://www.iqx7.com/products/sqlite-encryption
źródło
Możesz użyć procedur tworzenia funkcji SQLite ( podręcznik PHP ):
Podczas wstawiania danych możesz użyć funkcji szyfrowania bezpośrednio i WSTAWIĆ zaszyfrowane dane lub możesz użyć funkcji niestandardowej i przekazać niezaszyfrowane dane:
Podczas pobierania danych możesz również skorzystać z funkcji wyszukiwania SQL:
źródło