使用wxSqlite3来解决sqlite加密问题zz

20141222更新:html

最后仍是没用wxSQLite3,而是使用了SQLCipher,感受SQLCipher的文档写得好一些,能够参考这两个连接:http://www.cocoachina.com/industry/20140522/8517.htmlhttps://www.zetetic.net/sqlcipher/ios-tutorial/ android

-------------------
ios

这里介绍一个开源项目: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 后就可进行数据库操做,不然会返回错误。sql

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

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

sqlite3_rekey 是变动密钥或给没有加密的数据库添加密钥或清空密钥,变动密钥或清空密钥前必须先正确执行 sqlite3_key。在正确执行 sqlite3_rekey 以后在 sqlite3_close 关闭数据库以前能够正常操做数据库,不须要再执行 sqlite3_key。函数

int sqlite3_rekey( sqlite3 *db, const void *pKey, int nKey),参数同上。加密

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

缺点:

严重依赖于wxWidgets C++ library。不利于发布,编译、维护繁琐。

参考:

android/ios SQLite数据库sqlcipher加密解密技术-几种解决方案分析比较wxSqlite3

相关文章
相关标签/搜索