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.
using System.Data.SQLite;
namespace EncryptDB
{
class Program
{
static void Main(string[] args)
{
string connectionString = @"C:\Programming\sqlite3\db.db";
string passwordString = "password";
byte[] passwordBytes = GetBytes(passwordString);
SQLiteConnection.CreateFile(connectionString);
SQLiteConnection conn = new SQLiteConnection("Data Source=" + connectionString + ";Version=3;");
conn.SetPassword(passwordBytes);
conn.Open();
SQLiteCommand sqlCmd = new SQLiteCommand("CREATE TABLE data(filename TEXT, filepath TEXT, filelength INTEGER, directory TEXT)", conn);
sqlCmd.ExecuteNonQuery();
sqlCmd = new SQLiteCommand("INSERT INTO data VALUES('name', 'path', 200, 'dir')", conn);
sqlCmd.ExecuteNonQuery();
conn.Close();
}
static byte[] GetBytes(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
bytes = System.Text.Encoding.Default.GetBytes(str);
return bytes;
}
}
}
Optional können Sie es entfernen conn.SetPassword(passwordBytes);
und ersetzen, wobei es conn.ChangePassword("password");
nachher conn.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.
string filename = @"C:\Programming\sqlite3\db.db";
string passwordString = "password";
SQLiteConnection conn = new SQLiteConnection("Data Source=" + filename + ";Version=3;Password=" + passwordString + ";");
conn.Open();