大佬教程收集整理的这篇文章主要介绍了SQLite 数据库加密的一种解决方案,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
但是其实sqlite是支持数据库加密的,前些天看到了网友arris的帖子,具体如下:
sqlite的源代码中原本就考虑了加密的实现,并且保留了接口sqlite3_key和sqlite3_rekey,只是这两个函数在free版本中没有实现,但幸运的是,sqlite的源代码的代码是开放并允许修改,我们可以很方便的增加加密的实现。在http://www.sqlite.com.cn/POParticle/3/216.Html链接的的代码包中就包含有可加密sqlite的源代码的实现,我根据这个包编译了一个可加密的sqlite。这个包加密实现调用了windows API 的加密函数,所以只能在windows中使用。
这个可加密的版本是在一个ADO.NET 2.0 sqlite Data 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。
加密后数据库文件显示为乱码:
sqlite3 *db;
sqlite3_stmt *stat;
char *zErrMsg = 0;
char buffer2[1024]="0";
sprintf(temp,_T("%s"),_T("utf.db"));
CCodingConv::GB2312_2_UTF8(fileRoot,256,temp,0);
sqlite3_open(fileRoot,@R_320_4616@;
if(db == NulL)
return -1;
}
sqlite3_exec(db,"create table List (flIEname VARCHAR(128) UNIQUE,fzip TEXT);",&zErrMsg);
sqlite3_prepare(db,"insert into List values ('中文GB2312编码',?);",-1,&stat,0);
strcpy(temp,"测试数据UTF-8的支持情况");
int len = (int)strlen(temp);
sqlite3_bind_text(stat,1,len,null);
sqlite3_prepare(db,"SELEct * from List;",0);
const unsigned char * test = sqlite3_column_text(stat,1);
int size = sqlite3_column_bytes(stat,1);
printf("%s",test);
具体的源代码如下:
sqlite3.3.7 加密版源代码(VC2003)
sqlite3.3.7 加密版源代码(VC2005)
例子1,例子2
以上是大佬教程为你收集整理的SQLite 数据库加密的一种解决方案全部内容,希望文章能够帮你解决SQLite 数据库加密的一种解决方案所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。