Ich lerne gerade SQLite und war neugierig, ob dies möglich ist:
Verschlüsselung der Datenbankdatei?
Passwort schützen Öffnen der Datenbank?
PS. Ich weiß, dass es diese "SQLite Encryption Extension (SEE)" gibt, aber laut Dokumentation "The SEE ist lizenzierte Software ..." und "Die Kosten für eine unbefristete Quellcodelizenz für SEE betragen 2000 US-Dollar."
Antworten:
In SQLite sind Hooks für die Verschlüsselung integriert, die in der Normalverteilung nicht verwendet werden. Hier sind jedoch einige mir bekannte Implementierungen:
Für SEE und SQLiteCrypt muss eine Lizenz erworben werden.
Offenlegung: Ich habe botansqlite3 erstellt.
quelle
Sie können SQLite3 DB mit einem Kennwort schützen. Stellen Sie das Kennwort zum ersten Mal vor dem Ausführen von Vorgängen wie folgt ein.
dann kannst du das nächste mal gerne darauf zugreifen
Dadurch kann kein GUI-Editor Ihre Daten anzeigen. Wenn Sie das Passwort später ändern möchten, verwenden Sie
conn.ChangePassword("new_password");
Zum Zurücksetzen oder Entfernen des Passworts die Optionconn.ChangePassword(String.Empty);
quelle
ChangePassword
verwendet wird? AES 128? RSA ..?SetPassword
Methode (zu diesem Zeitpunkt) im Grunde genommen nutzlos erscheint. Die einzige Möglichkeit, dieSystem.Data.SQLite
Bibliothek dazu zu bringen, das Kennwort ordnungsgemäß anzuwenden, war die Verwendung derChangePassword
Methode. MitSetPassword
( vor dem Aufrufen derOpen
Methode, wie es anscheinend von der Bibliothek verlangt wird) konnte ich die Datenbank in SQLiteStudio weiterhin ohne Kennwort öffnen und bearbeiten. Erst als ich dieChangePassword
Methode verwendete ( nach dem Aufrufen derOpen
Methode), blieb die Passwortanwendung tatsächlich "hängen".Die .net-Bibliothek System.Data.SQLite bietet auch Verschlüsselung.
quelle
Sie können erhalten
sqlite3.dll
Datei mit Verschlüsselungsunterstützung von http://system.data.sqlite.org/ .1 - Gehen Sie zu http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki und laden Sie eines der Pakete herunter. Die .NET-Version spielt hier keine Rolle.
2 -
SQLite.Interop.dll
Aus dem Paket extrahieren und in umbenennensqlite3.dll
. Diese DLL unterstützt die Verschlüsselung über Klartextkennwörter oder Verschlüsselungsschlüssel.Die erwähnte Datei ist nativ und erfordert KEIN .NET Framework. Abhängig vom heruntergeladenen Paket ist möglicherweise Visual C ++ Runtime erforderlich.
AKTUALISIEREN
Dies ist das Paket, das ich für die 32-Bit-Entwicklung heruntergeladen habe: http://system.data.sqlite.org/blobs/1.0.94.0/sqlite-netFx40-static-binary-Win32-2010-1.0.94.0.zip
quelle
.lib
, die ich in meine ausführbare Datei einbetten konnte. Ich konnte keine DLLs haben.lib
unddll
Datei geben wird.Beachten Sie, dass das Folgende kein Ersatz für eine ordnungsgemäße Sicherheitslösung sein soll.
Nachdem ich vier Tage damit herumgespielt habe, habe ich eine Lösung zusammengestellt, die nur das Open-Source-Paket System.Data.SQLite von NuGet verwendet. Ich weiß nicht, wie viel Schutz dies bietet. Ich benutze es nur für meinen eigenen Studiengang. Dadurch wird die Datenbank erstellt, verschlüsselt, eine Tabelle erstellt und Daten hinzugefügt.
Optional können Sie es entfernen
conn.SetPassword(passwordBytes);
und ersetzen, wobei esconn.ChangePassword("password");
nachherconn.Open();
statt nachher platziert werden muss . Dann brauchen Sie die GetBytes-Methode nicht.Zum Entschlüsseln müssen Sie lediglich das Kennwort vor dem Öffnen des Anrufs in Ihre Verbindungszeichenfolge eingeben.
quelle
"I think I saw 128 bit somewhere"
- Dies ist eine sehr schlechte Aussage, wenn Sie sich mit Verschlüsselung befassen möchten. Als Faustregel gilt, dass Sie es niemals selbst tun, wenn Sie es nicht verstehen. Andernfalls ist es besser, wenn Sie es überhaupt nicht verwenden.Sie können Daten auf der Clientseite jederzeit verschlüsseln. Bitte beachten Sie, dass nicht alle Daten verschlüsselt werden müssen, da es zu Leistungsproblemen kommt.
quelle
Na ja,
SEE
ist teuer. DieSQLite
Schnittstelle ist jedoch für die Verschlüsselung (Pager) integriert. Dies bedeutet, dass man zusätzlich zu vorhandenem Code leicht einen Verschlüsselungsmechanismus entwickeln kann, der nicht sein mussAES
. Alles wirklich. Bitte lesen Sie meinen Beitrag hier: https://stackoverflow.com/a/49161716/9418360Sie müssen SQLITE_HAS_CODEC = 1 definieren, um die Pager-Verschlüsselung zu aktivieren. Beispielcode unten (Originalquelle
SQLite
):Es gibt eine kommerzielle Version
C language
für dieSQLite
Verschlüsselung mit AES256 - sie kann auch verwendet werdenPHP
, muss jedoch kompiliertPHP
undSQLite
erweitert werden. Es entschlüsselt / verschlüsselt dieSQLite
Datenbankdatei im laufenden Betrieb, der Dateiinhalt wird immer verschlüsselt. Sehr hilfreich.http://www.iqx7.com/products/sqlite-encryption
quelle
Sie können die Routinen zur Funktionserstellung von SQLite verwenden ( PHP-Handbuch ):
Beim Einfügen von Daten können Sie die Verschlüsselungsfunktion direkt verwenden und die verschlüsselten Daten einfügen, oder Sie können die benutzerdefinierte Funktion verwenden und unverschlüsselte Daten übergeben:
Beim Abrufen von Daten können Sie auch die SQL-Suchfunktion verwenden:
quelle