music unfamous original game design efficient software wtf
life ui algorithm fix programming

Sqlite3 加密

作者:trinity     2015-5-23  标签:  unfamous  original  programming 

一,背景

    在使用 sqlite3.8.x 的过程中,因为商业上的原因需要将数据库文件加密,sqlite3 仅仅提供了加密的接口,没有提供加密实现(如果实现了,sqlite3本身是开源的,也没什么加密的意义)。就需要自己去定义加密的实现。

二,自己实现加密

    说是自己实现加密,其实是站在 sqlite3 的立场来说的。在 sourceforge 上有一个wxsqlite3 的模块,姑且利用它的加密实现。其实,用 wxsqlite3 是极好的,只是我这边的 sqlite3 部分的代码已经调试完毕,仅仅需要加密,所以没有直接使用 wxsqlite3 这个库。

三,具体实施

    下载时注意需要下载的 sqlite3 版本和 wxsqlite3 所支持的 sqlite3 版本大致一致,尽量大版本号相同。

    1,修改 def 文件

    添加

    sqlite3_key
    sqlite3_key_v2
    sqlite3_rekey
    sqlite3_rekey_v2

    2,在 sqlite3.h中添加

    #define SQLITE_HAS_CODEC 1
    #define SQLITE_CORE 1
    #define SQLITE_AMALGAMATION 1
    #define CODEC_TYPE CODEC_TYPE_AES256
    #define THREADSAFE 1
    #define SQLITE_SECURE_DELETE 1
    #define SQLITE_SOUNDEX 1
    #define SQLITE_ENABLE_COLUMN_METADATA 1
     3,默认的 shell.c 没有实现 -key 参数,可以自己实现。 我实现的 -key 参数版本可能和标准不太一致,语法为 
    sqlite3 -key dbfile old-password new-password
    更标准的可能是让 dbfile 放到 -key 的前面。

     4,由此可以编译出静态库,动态库和 sqlite3.exe。

四,代码下载

     因为我没打算升级维护这个代码,最多是随 sqlite3 和 wxsqlite3 的升级而升级,所以没有开源到 github 上。另外没有提供 linux 平台的 Makefile,有bug 的话可以联系 sqlite3 作者和 wxsqlite3 作者。

    下载地址