2011-01-05 12 views
5

Jak mogę utworzyć zaszyfrowaną bazę danych SQLite, która faktycznie pozostaje zaszyfrowana lub którą mogę później otworzyć.SQLite - Tworzenie zaszyfrowanych baz danych. Jak...?

Użyłem SQLite2009 Pro Enterprise Manager, który "może" tworzyć zaszyfrowane bazy danych, ale po wpisaniu klucza szyfrującego nie można ich już otworzyć.

Użyłem SQLiteManager z SQLabs do stworzenia zaszyfrowanej bazy danych, a następnie można ją otworzyć z dowolnego narzędzia lub kodu SQLite bez konieczności wpisywania klucza.

Więc, w jaki sposób możesz utworzyć zaszyfrowaną bazę danych SQLite?

Mam zamiar korzystać z bazy danych w aplikacji Adobe Flex.

Dziękuję.

+1

Czy SQLite2009 jest produktem sprzedawanym przez firmę, która napisała SQLite? Ponieważ wiedziałem, że je mają. A jeśli to nie zadziałałoby, skontaktowałbym się z nimi w sprawie, zamiast zaczynać od nowa. –

+0

Nie jestem pewien, wydaje się, że został napisany przez kogoś o imieniu Osen Kusnadi (nie szukał swojego imienia). Ale nie byłbym zaskoczony, że zawsze wydaje się być jednym z pierwszych zaleceń na stronie sqlite.org. Próbowałem tej konkretnej aplikacji od 2010 do dziś i to szyfrowanie nigdy nie działało. – Francisc

Odpowiedz

4

SQLite obsługuje integrację szyfrowania, ale domyślna dystrybucja SQLite o otwartym kodzie źródłowym nie obsługuje szyfrowania. Zaszyfrowane wersje SQLite będą przenośne tylko na różnych klientach lub narzędziach, jeśli wszystkie używają tego samego rozszerzenia szyfrowania.

Sami deweloperzy SQLite rozpowszechniają komercyjną wersję SQLite, która obsługuje szyfrowanie w przejrzysty sposób. Kiedy moduł ten jest używany do szyfrowania, szyfrowanie działa na różnych platformach i każdy bajt zapisany w pliku jest szyfrowany. W zaszyfrowanym pliku SQLite na dysku nie ma nic, co mogłoby wskazywać, że jest to baza danych SQLite. Wiele narzędzi obsługuje tę implementację, umożliwiając umieszczenie komercyjnego pliku sqlite.dll w miejsce kodu źródłowego.

Istnieją również rozszerzenia podmiotów trzecich, które obsługują szyfrowanie. Na przykład System.Data.SQLite obsługuje szyfrowanie, ale wykorzystuje do tego biblioteki .NET, dzięki czemu zaszyfrowany System.Data.SQLite może być odczytywany tylko przez innego klienta, który również używa System.Data.SQLite (jest to celowe, poza szacunek dla głównych twórców SQLite i ich komercyjnego produktu).

Adobe AIR 1.5 obsługuje szyfrowanie. Nie wiem na pewno, który mechanizm jest używany, szukałem go i nie mogłem znaleźć odpowiedzi. Możliwe, że zaszyfrowaną bazę danych AIR można odczytać tylko w środowisku AIR. Nie wiem jednoznacznie w żaden sposób. Jednak tutaj jest dobrym punktem wyjścia do poznawania pracy z zaszyfrowanych baz danych AIR:

http://probertson.com/articles/2008/11/18/air-1_5-encrypted-sqlite-database-how-to/

+0

Wielkie dzięki, Samuel. Nie miałem pojęcia, jak to działa, jeśli chodzi o szyfrowanie baz danych SQLite. Wiem, że AIR to wspiera, ale myślałem, że to coś "uniwersalnego". Czy z ciekawości można utworzyć bazę danych, która nie została zaszyfrowana, później, gdy ma już w sobie wszystkie rodzaje danych? – Francisc

+1

@Francisc, nie, baza danych nie może zostać przekształcona z zaszyfrowanej na niezaszyfrowaną. Można jednak połączyć się z bazą danych, zrzucić ją, a następnie połączyć się z pustą bazą danych i zaimportować poprzedni zrzut. Dzięki temu mechanizmowi można skutecznie przekonwertować z zaszyfrowanego na niezaszyfrowany, ale jest pośredni. –

+0

Powiedziałeś "od zaszyfrowanego do niezaszyfrowanego", czy miałeś na myśli to na odwrót? Dzięki. – Francisc

3

Re: szyfrowanie istniejącej bazy

„z ciekawości, może to baza danych, która nie została utworzona zaszyfrowana zrobić to później, kiedy ma już w sobie wszystkie rodzaje danych? "

Nie można zaszyfrować bezpośrednio niezaszyfrowanej bazy danych. Można zmienić klucz szyfrowania danej bazie danych za pomocą metody SQLConnection.reencrypt(), ale działa tylko na już zaszyfrowanych baz danych:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/data/SQLConnection.html#reencrypt()

Jednak jako obejście można otworzyć wiele baz danych w ramach jednej SQLConnection i możesz kopiować dane i strukturę z jednego do drugiego.Ja faktycznie napisałem klasę użytkową, która używa tej techniki, co pozwala na szyfrowanie niezaszyfrowanej db:

https://github.com/probertson/air-sqlite/blob/DB-copy-dev/src/com/probertson/data/DBCopier.as

+0

Doskonała odpowiedź, chciałbym zaznaczyć dwie poprawne odpowiedzi. Dziękuję Ci. – Francisc

+0

Jeśli masz kod źródłowy rozszerzenia szyfrowania, możesz. SQLCipher oferuje taki kod źródłowy. To samo można zrobić dla System.Data.sqlite. To naprawdę łatwe. –

Powiązane problemy