Perlu diingat, berikut ini tidak dimaksudkan sebagai pengganti solusi keamanan yang tepat.
Setelah bermain-main dengan ini selama empat hari, saya telah mengumpulkan solusi hanya menggunakan paket System.Data.SQLite open source dari NuGet. Saya tidak tahu seberapa besar perlindungan yang diberikannya. Saya hanya menggunakannya untuk program studi saya sendiri. Ini akan membuat DB, mengenkripsinya, membuat tabel, dan menambahkan data.
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;
}
}
}
Secara opsional, Anda dapat menghapus conn.SetPassword(passwordBytes);
, dan menggantinya dengan conn.ChangePassword("password");
yang harus ditempatkan setelah, conn.Open();
bukan sebelumnya. Maka Anda tidak memerlukan metode GetBytes.
Untuk mendekripsi, itu hanya masalah meletakkan kata sandi di string koneksi Anda sebelum panggilan dibuka.
string filename = @"C:\Programming\sqlite3\db.db";
string passwordString = "password";
SQLiteConnection conn = new SQLiteConnection("Data Source=" + filename + ";Version=3;Password=" + passwordString + ";");
conn.Open();