Gardez à l'esprit que ce qui suit n'est pas destiné à remplacer une solution de sécurité appropriée.
Après avoir joué avec cela pendant quatre jours, j'ai mis en place une solution en utilisant uniquement le package open source System.Data.SQLite de NuGet. Je ne sais pas quelle protection cela offre. Je ne l'utilise que pour mon propre programme d'études. Cela créera la base de données, la chiffrera, créera une table et ajoutera des données.
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;
}
}
}
Vous pouvez éventuellement le supprimer conn.SetPassword(passwordBytes);
et le remplacer par celui conn.ChangePassword("password");
qui doit être placé après conn.Open();
au lieu d’avant. Ensuite, vous n'aurez pas besoin de la méthode GetBytes.
Pour déchiffrer, il suffit de mettre le mot de passe dans votre chaîne de connexion avant l'appel à ouvrir.
string filename = @"C:\Programming\sqlite3\db.db";
string passwordString = "password";
SQLiteConnection conn = new SQLiteConnection("Data Source=" + filename + ";Version=3;Password=" + passwordString + ";");
conn.Open();