Sqlite数据库的加密

1、创建空的sqlite数据库。

// 数据库名的后缀你可以直接指定,甚至没有后缀都可以
// 方法一:创建一个空sqlite数据库,用IO的方式
FileStreamfs=File.Create( c:\\test.db );
// 方法二:用SQLiteConnection
SQLiteConnection.CreateFile( c:\\test.db );

创建的数据库是个0字节的文件。

2、创建加密的空sqlite数据库

// 创建一个密码为password的空的sqlite数据库
SQLiteConnection.CreateFile( c:\\test2.db );
SQLiteConnectioncnn= newSQLiteConnection( DataSource=c:\\test2.db );
SQLiteConnectioncnn= newSQLiteConnection( DataSource=D:\\test2.db );
cnn.Open();
cnn.ChangePassword( password );

3、给未加密的数据库加密

SQLiteConnectioncnn= newSQLiteConnection( DataSource=c:\\test.db );
cnn.Open();
cnn.ChangePassword( password );

4、打开加密sqlite数据库

//方法一
SQLiteConnectioncnn=newSQLiteConnection(DataSource=c:\\test2.db);
cnn.SetPassword(password);
cnn.Open();
//方法二
SQLiteConnectionStringBuilderbuilder=newSQLiteConnectionStringBuilder();
builder.DataSource=@”c:\test.db;
builder.Password=@”password;
SQLiteConnectioncnn=newSQLiteConnection(builder.ConnectionString);
cnn.Open();

分页

select * from messages limit 10,100;

表示跳过10行,取100行的返回结果。


sqlite的源代码中原本就考虑了加密的实现,并且保留了接口sqlite3_key和sqlite3_rekey,只是这两个函数在free版本中没有实现,但幸运的是,sqlite的源代码的代码是开放并允许修改,我们可以很方便的增加加密的实现。在http://www.sqlite.com.cn/POParticle/3/216.Html链接的的代码包中就包含有可加密sqlite的源代码的实现,我根据这个包编译了一个可加密的sqlite。这个包加密实现调用了windows API的加密函数,所以只能在windows中使用。

这个可加密的版本是在一个ADO.NET 2.0SQLiteData Provider的基础上改过来的(http://www.sqlite.com.cn/POParticle/3/216.Html),据原作者声称效率损失在千分之一以下。原始工程是基于VS2005的,但是考虑到其普及性还不是很广,所以重新建立了一个居于VC2003的工程。

其实SQLite的两个加密函数使用起来非常的简单,下面分情况说明:

给一个未加密的数据库添加密码:如果想要添加密码,则可以在打开数据库文件之后,关闭数据库文件之前的任何时刻调用sqlite3_key函数即可,该函数有三个参数,其中第一个参数为数据库对象,第二个参数是要设定的密码,第三个是密码的长度。例如:sqlite3_key(db,"1q2w3e4r",8);//给数据库设定密码1q2w3e4r

读取一个加密数据库中的数据:完成这个任务依然十分简单,你只需要在打开数据库之后,再次调用一下sqlite3_key函数即可,例如,但数据库密码是123456时,你只需要在代码中加入sqlite3_key(db,"123456",6);

①更改数据库密码:首先你需要使用当前的密码正确的打开数据库,之后你可以调用sqlite3_rekey(db,"112233",6)来更改数据库密码。

②删除密码:也就是把数据库恢复到明文状态。这时你仍然只需要调用sqlite3_rekey函数,并且把该函数的第二个参数置为NULL或者"",或者把第三个参数设为0。


你可能感兴趣的:(sqlite)