sqlite3加密

sqlite3加密,第1张

概述  “美是到处都有的,对于我们的眼睛不是缺少美,而是缺少发现”,罗丹的这句名言不仅适用于艺术创作,而且也适用于软件开发。具有聪明才智的人,总是不甘寂寞而乐于把自己的才华与人分享,善于发现和使用这些人的代码,实在是一个提高软件开发效率的明智之举。并且只有借助于众人的智慧才是开发出优秀软件的唯一途径。 wxSQLite3 就是这样的一个优秀作品,它把 SQLite 嵌入式数据库与 wxWidgets

“美是到处都有的,对于我们的眼睛不是缺少美,而是缺少发现”,罗丹的这句名言不仅适用于艺术创作,而且也适用于软件开发。具有聪明才智的人,总是不甘寂寞而乐于把自己的才华与人分享,善于发现和使用这些人的代码,实在是一个提高软件开发效率的明智之举。并且只有借助于众人的智慧才是开发出优秀软件的唯一途径。

wxsqlite3 就是这样的一个优秀作品,它把 sqlite 嵌入式数据库与 wxWidgets 结合起来,使用 C++ 语法对 sqlite 数据库的 C API 进行了封装,而且作为 wxWidgets 的一个组件,自然很好的融合了其特点,使得 wxWidgets 与 sqlite 数据库配合使用天衣无缝,堪称珠联璧合,比我自己目前正在编写的数据库 *** 作代码优雅得多,正是我所需要的好东西。

编译 wxsqlite3 很简单,与 wxWidgets 类似,在 build 目录下可以找到一个对应 VC 编译器的 makefile.vc 文件,开头部分是编译选项,跟编译 wxWidgets 时使用的参数项大同小异,一望便知。然后使用命令 nmake -f makefile.vc,稍等片刻就编译完成。我照例把 wxsqlite3 编译成静态库使用,只是有一点要注意,makefile 文件中有个变量 WXsqlite3_liB_CXXFLAGS 在编译成静态库的时候要手动修改一下,将其中的 /MD 字段改为 /MT。这两个都是 cl.exe 的参数,具体含义可以查看MSDN。另外还需要注意的是,使用 wxsqlite3 的静态库时仍然依赖 sqlite3。所以在 VC 中使用 wxsqlite3 的话,一定要记得加入:

C++代码
#pragma comment(lib,"sqlite3.lib")




否则链接的时候就会出现类似的错误:

Vc代码
error LNK2001: unresolved external symbol _sqlite3_backup_steperror LNK2001: unresolved external symbol _sqlite3_openerror LNK2001: unresolved external symbol _sqlite3_xxxxerror LNK2001: unresolved external symbol _sqlite3_xxxx_xxxxerror LNK2001: unresolved external symbol _sqlite3_xxxx...



另外,建议编译 wxsqlite3 的静态库的时候,sqlite3 也采用静态库的方式提供,避免发布的时候还要带上一个 dll 文件,麻烦!

关于生成 sqlite3 静态库的方法,可以参考这里:
http://haiyi.iteye.com/blog/287904


顺便提一下,Cppsqlite3 也是一个关于 sqlite 优秀的 C++ 封装。比 wxsqlite3 更加通用一些,只是作者已经很久没有更新了。相比之下,wxsqlite3 的更新速度几乎和 sqlite3 官方同步,最适合像我这样喜新厌旧的人了

两个库的地址:
wxsqlite3
http://wxcode.sourceforge.net/components/wxsqlite3/
Cppsqlite3
http://www.codeproject.com/KB/database/CppSQLite.aspx

sqlite 3 开源版不带加密功能,对于一个保存在本地的数据库来说没有加密功能让人难以接受,只要用记事本打开数据库就可以看到数据库内保存的数据,对安全多多少少有一点影响。有一个办法是把内容加密后保存到数据库中,但遇到类似 like,或字段内容与字段内容比较这就不行了。治本的办法是让 sqlite 原生的支持加密。好在 sqlite 的作者预留了加密解密的相关接口,许多爱好者也自己修改源版添加加密功能。如果你也在关注,那你可能已经阅读了大量关于如何添加加密的文章,同时我也不是很通相关的技术,我就不再讲解如何修改源码了。虽然网上有大量的文章教你如何修改源码,但都没有提供编译后的 DLL 文件,或者提供的 DLL 版本过低。这里介绍一个开源项目:wxSQLite3,该项目是一个 sqlite 的 C++ warpper,它顺带将 sqlite 的加密函数实现了,并且它使用 AES 算法进行加密。你可以在http://sourceforge.net/projects/wxcode/files/Components/下载到最新的包,在目录 \sqlite3\secure 下你可以找到一个 sqlite3.dll 文件,这个就是已编译的带加密的 sqlite 3 DLL 文件,而且 wxsqlite3 项目更新很快,你总是可以下载到较新的包。在最新的1.9.8版本中开始对256位AES加密进行实验,估计不久的版本就可以稳定使用。

使用起来也很简单,首先打开数据库 sqlite3_open,然后在 *** 作数据库之前执行 sqlite3_key 后就可进行数据库 *** 作,否则会返回错误。

sqlite3_key是输入密钥,如果数据库已加密必须先执行此函数并输入正确密钥才能进行 *** 作,如果数据库没有加密,执行此函数后进行数据库 *** 作反而会出现“此数据库已加密或不是一个数据库文件”的错误。

int sqlite3_key( sqlite3 *db,const voID *pKey,int nKey),db 是指定数据库,pKey 是密钥,nKey 是密钥长度。例:sqlite3_key( db,"abc",3);

sqlite3_rekey是变更密钥或给没有加密的数据库添加密钥或清空密钥,变更密钥或清空密钥前必须先正确执行 sqlite3_key。在正确执行 sqlite3_rekey 之后在 sqlite3_close 关闭数据库之前可以正常 *** 作数据库,不需要再执行 sqlite3_key。

int sqlite3_rekey( sqlite3 *db,int nKey),参数同上。

清空密钥为 sqlite3_rekey( db,NulL,0)。

总结

以上是内存溢出为你收集整理的sqlite3加密全部内容,希望文章能够帮你解决sqlite3加密所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1182714.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存