SQLite3 Multiple Ciphers NuGet

SQLite3 Multiple Ciphers NuGet bietet C#/.NET-Bindungen für SQLite3 Multiple Ciphers. Unterlagert wird SQLitePCLRaw genutzt, um die Bindungen zu erstellen.

lizenz

Aktuelle Version ist die aktuellste Version.

Bis zum Frühjahr 2025 wurde die Komponente im GitHub-Repository SQLitePCL.raw von Eric Sink gepflegt – Eric hat jedoch beschlossen, keine kostenlosen SQLite-Builds mit Verschlüsselungsfunktion mehr zu veröffentlichen. Daher wird die Komponente nunmehr auf GitHub gehostet:

NuGet packages for SQLite3 Multiple Ciphers

C# 13 3

Das Repository SQLite3MultipleCiphers-NuGet wird durch ein separates Repository für die Erstellung der Binärdateien ergänzt:

Das Projekt stellt folgende 3 NuGet-Pakete zur Verfügung, die von NuGet.org heruntergeladen werden können:

Microsoft.Data.SQLite

Die Verwendung dieser Komponente zusammen mit Microsoft.Data.SQLite war vom Frühjahr 2025 bis Mitte November 2025 aufgrund eines lästigen Fehlers in der Microsoft.Data.SQLite-Implementierung problematisch, wenn nicht sogar unmöglich (siehe GitHub-Problem):

Bug in Microsoft.Data.SQLite

Das Verhalten von SQLite selbst hat sich ab Version 3.48.0 geändert. Seitdem greifen einfache Abfragen wie SELECT 1; auf die zugrunde liegende Datenbankdatei zu, obwohl das Datenbankschema davon nicht betroffen ist – dies war bei früheren Versionen von SQLite nicht der Fall.

Leider verwendete Microsoft.Data.SQLite eine solche SQL-Anweisung, um potentielle Anführungszeichen im Passwort zu behandeln, bevor der Verschlüsselungsschlüssel mit PRAGMA key gesetzt wird. Nachfolgend sind die relevanten Zeilen des Quellcodes aufgeführt:

111    var quotedPassword = ExecuteScalar(
112          "SELECT quote($password);",
113          connectionOptions.Password,
114          connectionOptions.DefaultTimeout);
115    ExecuteNonQuery(
116      "PRAGMA key = " + quotedPassword + ";",
117      connectionOptions.DefaultTimeout);

Der in der Funktion ExecuteScalar() ausgeführte SQL-Befehl greift intern auf die SQLite-Datenbankdatei zu, bevor der Verschlüsselungsschlüssel festgelegt wird, und gibt daher die Fehlermeldung Datei ist keine Datenbank aus.

Eine Pull-Anfrage mit geändertem Code wurde akzeptiert und per Rückportierung in Version 10.0.1 integriert. Diese Version wurde Mitte November 2025 offiziell freigegeben.

Es wird daher dringend empfohlen, ab sofort nur noch Version 10.0.1 (oder höher) zu verwenden, um Probleme mit der SQLite-Verschlüsselung zu vermeiden.

Background

In Zusammenarbeit mit Brice Lambson und Eric Sink wurde diese Bibliothek im Oktober/November 2023 in das Hauptprojekt SQLitePCLRaw integriert und als NuGet-Paket SQLitePCLRaw.bundle_e_sqlite3mc veröffentlicht.

Eine ausführlichere Version dieser Geschichte findet sich in Brice Lambsons Blogartikel „More SQLite Encryption in .NET”.

Im November 2025 wurde das Projekt als eigenständiges NuGet-Package SQLite3MC.PCLRaw.bundle veröffentlicht.

0%