Bạn có thể sử dụng mã hóa tích hợp sẵn của nhà cung cấp sqlite .net (System.Data.SQLite). Xem thêm chi tiết tại http://web.archive.org/web/20070813071554/http://sqlite.phxsoftware.com/forums/t/130.aspx
Để mã hóa cơ sở dữ liệu chưa được mã hóa hiện có hoặc để thay đổi mật khẩu của cơ sở dữ liệu được mã hóa , hãy mở cơ sở dữ liệu và sau đó sử dụng hàm ChangePassword () của SQLiteConnection:
SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db3");
cnn.Open();
cnn.ChangePassword("mypassword");
Để giải mã một lệnh gọi cơ sở dữ liệu được mã hóa hiện cóChangePassword()
bằng một NULL
hoặc ""
mật khẩu:
SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db3;Password=mypassword");
cnn.Open();
cnn.ChangePassword(null);
Để mở một cơ sở dữ liệu được mã hóa hiện có hoặc để tạo một cơ sở dữ liệu được mã hóa mới, hãy chỉ định một mật khẩu ConnectionString
như được hiển thị trong ví dụ trước hoặc gọi SetPassword()
hàm trước khi mở một mật khẩu mới SQLiteConnection
. Mật khẩu được chỉ định trong ConnectionString
phải là văn bản rõ ràng, nhưng mật khẩu được cung cấp trong SetPassword()
hàm có thể là mảng byte nhị phân.
SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db3");
cnn.SetPassword(new byte[] { 0xFF, 0xEE, 0xDD, 0x10, 0x20, 0x30 });
cnn.Open();
Theo mặc định, từ khóa ATTACH sẽ sử dụng cùng một khóa mã hóa làm cơ sở dữ liệu chính khi đính kèm tệp cơ sở dữ liệu khác vào kết nối hiện có. Để thay đổi hành vi này, bạn sử dụng công cụ sửa đổi KEY như sau:
Nếu bạn đang đính kèm cơ sở dữ liệu được mã hóa bằng mật khẩu văn bản rõ ràng:
SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db3");
cnn.Open();
cmd = new SQLiteCommand("ATTACH DATABASE 'c:\\pwd.db3' AS [Protected] KEY 'mypassword'", cnn);
cmd.ExecuteNonQuery();
Để đính kèm cơ sở dữ liệu được mã hóa bằng mật khẩu nhị phân:
SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db3");
cnn.Open();
cmd = new SQLiteCommand("ATTACH DATABASE 'c:\\pwd.db3' AS [Protected] KEY X'FFEEDD102030'", cnn);
cmd.ExecuteNonQuery();