Verschlüsselte Datei oder db in python

Ich habe eine sqlite3 db, die ich einfügen / wählen aus in Python. Die App funktioniert super, aber ich möchte es so zwicken, dass niemand aus der DB ohne Passwort lesen kann. Wie kann ich das in Python machen? Ich habe keine Ahnung, wo ich anfangen soll.

5 Solutions collect form web for “Verschlüsselte Datei oder db in python”

Sie können SQLCipher verwenden.

http://sqlcipher.net/

Open Source Vollständige Datenbankverschlüsselung für SQLite

SQLCipher ist eine SQLite-Erweiterung, die eine transparente 256-Bit-AES-Verschlüsselung von Datenbankdateien ermöglicht. Seiten werden verschlüsselt, bevor sie auf die Festplatte geschrieben werden und beim Lesen zurück entschlüsselt werden. Durch den geringen Platzbedarf und die hervorragende Leistung eignet er sich hervorragend zum Schutz von eingebetteten Applikationsdatenbanken und eignet sich hervorragend für die mobile Entwicklung.

  1. Blazing schnelle Leistung mit so wenig wie 5-15% Overhead für die Verschlüsselung bei vielen Operationen
  2. 100% der Daten in der Datenbankdatei ist verschlüsselt Verwendet gute Sicherheitspraktiken (CBC-Modus, Schlüsselableitung)
  3. Zero-Konfiguration und Anwendungsebene Kryptographie Breite Plattform
  4. Unterstützung: Arbeiten mit C / C ++, Obj-C, QT, Win32 / .NET, Java, Python, Ruby, etc. unter Windows, Linux, iPhone / iOS …

Eine Liste der Python-Verschlüsselungsbeispiele .

Wie Frontware vorschlägt, können Sie sqlcipher verwenden.

Pysqlcipher python-Paket kann es einfacher zu bedienen, da es die sqlcipher-Code-Verschmelzung verwendet, um die Erweiterung zu kompilieren.

Es sollte nur eine Frage der Verwendung von pysqlcipher wie Sie würde verwenden sqlite.dbapi2, nur die Einstellung der richtigen Krypto pragmas.

SQLite-Datenbanken sind ziemlich menschlich lesbar, und es gibt keine eingebaute Verschlüsselung.

Bist du besorgt über jemanden, der direkt auf die Datenbankdateien zugreift und sie liest oder durch das Programm auf sie zugreift?

Ich nehme das ehemalige an, weil das letztere nicht wirklich datenbankbezogen ist – es ist die Sicherheit Ihrer Anwendung, die Sie fragen.

Ein paar Optionen kommen in den Sinn:

  1. Schütze das db mit Dateisystemberechtigungen und nicht Verschlüsselung. Sie haben nicht erwähnt, was Ihre Umgebung ist, also kann ich nicht sagen, ob dies für Sie bearbeitbar ist oder nicht, aber es ist wahrscheinlich die einfachste und zuverlässigste Art, da Sie nicht versuchen können, zu entschlüsseln, was Sie nicht lesen können.
  2. Verschlüsselung in Python vor dem Schreiben, und entschlüsseln in Python nach dem Lesen. Ziemlich einfach, aber Sie verlieren die meisten der Power von SQL-Set-basierte Matching-Operationen.
  3. Wechseln Sie zu einer anderen Datenbank; Benutzerauthentifizierung und Berechtigungen sind Standardmerkmale der meisten Mehrbenutzerdatenbanken. Wenn du dich gegen die Beschränkungen eines Werkzeuges kommst, kann es einfacher sein, bei anderen Werkzeugen umzusehen, anstatt neue Funktionen in das aktuelle Werkzeug zu hacken.

Ich hatte das gleiche Problem. Meine Anwendung kann mehrere Instanzen gleichzeitig laufen lassen. Aus diesem Grund kann ich nicht einfach die sqlite db-Datei verschlüsseln und damit fertig sein. Ich glaube auch nicht, dass die Verschlüsselung der Daten in Python eine gute Idee ist, da man in diesem Zustand keine ernsthafte Datenmanipulation in der Datenbank machen kann.

Mit diesen Einschränkungen habe ich die folgenden zwei Lösungen gefunden:

1) Verwenden Sie die zuvor erwähnte SQLCipher. Die Probleme, die ich hier sehe, sind, dass ich meine eigenen Bindungen für Python schreiben und es selbst kompilieren muss (oder die Gebühr bezahlen). Ich könnte dies in jedem Fall tun, da es eine gute Lösung für andere Python-Entwickler da draußen wäre. Wenn es mir gelingt, werde ich mit der Lösung zurückblicken.

2) Wenn Option 1 für mich zu schwierig oder zu zeitraubend ist, werde ich diese Methode verwenden. Diese Methode ist nicht so sicher. Ich werde pycrypto verwenden, um die Datenbankdatei zu verschlüsseln. Ich werde einen SQL-Server implementieren, der die Datenbankdatei entschlüsselt und dann Anfragen von verschiedenen Clients verarbeitet. Wenn es keine ausstehenden Anfragen gibt, wird es die Datenbank neu verschlüsseln. Dies wird langsamer sein, über alles, und lassen Sie die Datenbank in temporären entschlüsselten Zuständen.

Hoffe, diese Ideen helfen dem nächsten Kerl.

EDIT 1/13/2013

Ich habe auf SQLCipher aufgegeben, weil ich nicht scheinen konnte, um es zu kompilieren, und die Codebasis versucht, OpenSSL zu verwenden, was während einer Klangbibliothek ziemlich massiv für eine Codebasis für einfache AES 128 ist.

Ich fand eine andere Option wxSQLite3, und ich habe herausgefunden, wie man nur das SQLite-Verschlüsselungsstück trennen kann: https://github.com/shenghe/FreeSQLiteEncryption . Ich konnte das kompilieren und arbeiten (mit der neuesten Version von SQLite3). WxSQLite3 unterstützt auch AES 256 was wirklich cool ist. Mein nächster Schritt wird sein, um zu versuchen, pysqlite (das ist die sqlite Bibliothek, die in Python gebaut wird) mit der modifizierten sqlite3.dll zu kompilieren. Wenn das funktioniert, werde ich pysqlite zwicken, um das erweiterte, Verschlüsselungsstück der sqxite3.dll des wxSQLite3 zu unterstützen. In jedem Fall werde ich versuchen, diesen Thread mit meinen Ergebnissen zu aktualisieren, und wenn erfolgreich, werde ich die endgültige Code-Basis, mit Build-Anweisungen, auf Github.

  • Was ist der Unterschied zwischen Blowfish und Blowfish-Compat?
  • Python AES Entschlüsselung
  • Wie kann ich in Python verschlüsseln und in Java entschlüsseln?
  • Entschlüsseln Sie eine AES-verschlüsselte Nachricht (verschlüsselt in Python) in Java
  • Warum ist AES verschlüsselte Chiffre der gleichen Saite mit der gleichen Taste immer anders?
  • Verwenden von DPAPI mit Python?
  • Vigenere cipher 'String Index außerhalb des Bereichs' für die Entschlüsselung
  • Wie kann ich einen String in Python verschlüsseln und entschlüsseln?
  • Verschlüsseln von Daten in Python -
  • Python-Verschlüsselung - Unerwartete Variablenrückgabe
  • Python PyCrypto verschlüsselt / entschlüsselt Textdateien mit AES
  • Python ist die beste Programmiersprache der Welt.