Unutmayın, aşağıdakiler uygun bir güvenlik çözümünün yerine geçmez.
Dört gün boyunca bununla oynadıktan sonra, NuGet'in sadece açık kaynaklı System.Data.SQLite paketini kullanarak bir çözüm oluşturdum. Bunun ne kadar koruma sağladığını bilmiyorum. Sadece kendi dersim için kullanıyorum. Böylece DB oluşturulur, şifrelenir, tablo oluşturulur ve veri eklenir.
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;
}
}
}
İsteğe bağlı olarak, kaldırabilir conn.SetPassword(passwordBytes);
ve daha önce yerine conn.ChangePassword("password");
yerleştirilmesi gereken ile değiştirebilirsiniz conn.Open();
. O zaman GetBytes yöntemine ihtiyacınız olmayacak.
Şifresini çözmek için, sadece şifreyi açma çağrısından önce bağlantı dizenize koymak meselesidir.
string filename = @"C:\Programming\sqlite3\db.db";
string passwordString = "password";
SQLiteConnection conn = new SQLiteConnection("Data Source=" + filename + ";Version=3;Password=" + passwordString + ";");
conn.Open();