來源:https://blog.csdn.net/xjbx/article/details/2712236/
最近在做一個winform的程序,考慮用Sqlite的數據庫,小巧而實用,比Access強多了,不過需要加密,不過free版本沒有實現加密,有一些c++的實現:比如:http://www.sqlite.com.cn/MySqlite/3/253.Html 和http://www.cppblog.com/niewenlong/archive/2007/06/01/25261.html 。不過,鑒於我對c++不是很精通,於是就采用了ADO.NET 2.0 SQLite Data Provider 這樣可以直接利用它來創建一個加密的sqlite數據庫。
有關c#代碼如下:
1、創建空的sqlite數據庫。
// 數據庫名的后綴你可以直接指定,甚至沒有后綴都可以
//方法一:創建一個空sqlite數據庫,用IO的方式
FileStream fs = File.Create("c://test.db");
//方法二:用SQLiteConnection
SQLiteConnection.CreateFile("c://test.db");
創建的數據庫是個0字節的文件。
2、創建加密的空sqlite數據庫
// 創建一個密碼為password的空的sqlite數據庫
SQLiteConnection.CreateFile("c://test2.db");
SQLiteConnection cnn = new SQLiteConnection("Data Source=c://test2.db");
SQLiteConnection cnn = new SQLiteConnection("Data Source=D://test2.db");
cnn.Open();
cnn.ChangePassword("password");
3、給未加密的數據庫加密
SQLiteConnection cnn = new SQLiteConnection( " Data Source=c://test.db " );
cnn.Open();
cnn.ChangePassword("password");
4、打開加密sqlite數據庫
//方法一
SQLiteConnection cnn = new SQLiteConnection("Data Source=c://test2.db");
cnn.SetPassword("password");
cnn.Open();
//方法二
SQLiteConnectionStringBuilder builder = new SQLiteConnectionStringBuilder();
builder.DataSource = @"c:/test.db";
builder.Password = @"password";
SQLiteConnection cnn = new SQLiteConnection(builder.ConnectionString);
cnn .Open();
注:
A、因為加密的函數是利用windows api,故加密后的數據庫只能適用在windows平台,加密的方式是整體文件加密。
B、加密的算法是RC4,如果你想采用別的加密算法來加密,請參考ADO.NET 2.0 SQLite Data Provider 的源碼來修改。
c、相關sqlite數據庫操作類似ADO.NET 2.0。詳見ADO.NET 2.0 SQLite Data Provider的幫助文檔。
c、ADO.NET 2.0 SQLite Data Provider 版本為:1.0.53.0 ,SQLite版本 : 3.6.0。
d、開發環境為vs2008。
ADO.NET 2.0 SQLite Data Provider的下載地址:http://sourceforge.net/project/showfiles.php?group_id=132486&package_id=145568
有關sqlite的中文介紹,你可以看看這里:http://www.cnblogs.com/shanyou/archive/2007/01/08/615245.html
本文首發地址:http://www.watch-life.net/net-tip/sqlite-encrypted.html
更多文章見:守望軒[http://www.watch-life.net/]