โปรดทราบว่าสิ่งต่อไปนี้ไม่ได้มีไว้เพื่อทดแทนโซลูชันด้านความปลอดภัยที่เหมาะสม
หลังจากเล่นกับสิ่งนี้เป็นเวลาสี่วันฉันได้รวบรวมวิธีแก้ปัญหาโดยใช้แพคเกจ System.Data.SQLite โอเพ่นซอร์สจาก NuGet ฉันไม่รู้ว่าสิ่งนี้ให้ความคุ้มครองแค่ไหน ฉันใช้เพื่อการเรียนของตัวเองเท่านั้น สิ่งนี้จะสร้างฐานข้อมูลเข้ารหัสสร้างตารางและเพิ่มข้อมูล
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;
}
}
}
คุณสามารถลบ conn.SetPassword(passwordBytes);
และแทนที่ด้วยconn.ChangePassword("password");
สิ่งที่ต้องวางไว้ข้างหลังconn.Open();
แทนก่อนหน้านี้ จากนั้นคุณไม่จำเป็นต้องใช้เมธอด GetBytes
ในการถอดรหัสเป็นเพียงเรื่องของการใส่รหัสผ่านในสตริงการเชื่อมต่อของคุณก่อนที่จะเปิด
string filename = @"C:\Programming\sqlite3\db.db";
string passwordString = "password";
SQLiteConnection conn = new SQLiteConnection("Data Source=" + filename + ";Version=3;Password=" + passwordString + ";");
conn.Open();