打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
SQLite3开源加密wxSQLite3

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, const void *pKey, intnKey),参数同上。

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Delphi中使用SQLite3(二)
【转自看雪】解密市面上考试软件系列所有题库 + 编写自己的考试软件 + [求职]
《转载》SQLite3基本编程手册
Linux安装编译SQLCipher,对sqlite数据库加密、解密、修改、去掉密码操作
SQLCipher之攻与防
sqlite3.6.18加密模块change(讨论) 附asqlite控件bug
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服