1.sqlite3_key,sqlite3_rekey均在sqlite3_open和sqlite3_close之间使用。
2.给新建数据库加密
sqlite3_key(db,“XXXXXX”,num);db为数据库指针,XXXXXX为密码,num为密码位数
3.给已有数据库加密
sqlite3_rekey(db,“XXXXXX”,num);
4.给加密数据库改密码
sqlite3_key(db,“XXXXXX”,num);
sqlite3_rekey(db,“XXXXXX”,num);
5.取消密码
sqlite3_key(db,“XXXXXX”,num);
sqlite3_rekey(db,"",0);
1.到http://wxcode.sourceforge.net/components/wxsqlite3下载wxsqlite3,其目录中\sqlite3\secure\src下是实现加密所需的源代码。
2.使用VS2013新建一个“WIN32控制台应用程序”工程。项目名称为sqlite3,不勾选“预编译头”选项。点击“完成”。此时,项目中,应该是没有任何文件的。
3.将加密文件及数据库源文件(.\sqlite3\secure\src)拷到sqlite3工程目录下,codec.c, codec.h,codecext.c,extensionfunctions.c,rijndael.c,rijndael.h,sha2.c,sha2.h ,sqlite3.c,sqlite3.def,sqlite3.h,sqlite3ext.h,sqlite3secure.c。
4.在sqlite3工程中加入已经存在的文件,将文件sqlite3.def 和sqlite3secure.c加入到源文件中,不要将其他文件加入到列表中,否则编译不过。
5.在sqlite3工程属性中,加入模块定义文件,sqlite3.def。
6.在工程属性中,加入预定义宏
SQLITE_ENABLE_RTREE,
SQLITE_ENABLE_COLUMN_METADATA,
SQLITE_HAS_CODEC=1,
SQLITE3ENCRYPT_EXPORTS,
SQLITE_ENABLE_FTS3,
SQLITE_ENABLE_FTS3_PARENTHESIS,
SQLITE_SECURE_DELETE,
SQLITE_SOUNDEX,
CODEC_TYPE=CODEC_TYPE_AES128。
7.改变项目属性,其配置类型为动态库(.dll)。
8.直接编译,就可以在目标目录生成sqlite3.dll,sqlite3.lib文件。
9.将其sqlite3.h, sqlite3.dll,sqlite3.lib引入到要使用的项目上即可。若编译不通过,再添加一遍预定义宏。
1.sqlcipher依赖openssl库,首先安装openssl库:
1.@ubuntu:~$ sudo apt-get install openssl
2.@ubuntu:~$ sudo apt-get install libssl-dev
2.下载sqlcipher:
1.@ubuntu:~$ git clone https://github.com/sqlcipher/sqlcipher.git
2.@ubuntu:~$ cd sqlcipher-master/
3.@ubuntu:~/sqlcipher-master$ mkdir install1
3.编译sqlcipher
1.@ubuntu:~/sqlcipher$ ./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC" LDFLAGS="-lcrypto" --prefix=$PWD/install1 && make install
4.验证,手写个c文件测试,编译test.c文件
1.@ubuntu:~$ gcc -g -L /home/zhengzheng/sqlcipher-master/install1/lib/ -I /home/zhengzheng/sqlcipher-master/install1/include/ -lsqlcipher test.c -o test
1.由于交叉编译器不包含crypto加密库,所以从openwrt的staging_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/usr/lib下拷贝libcrypto.so.1.0.0共享库到openwrt的staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/mipsel-openwrt-linux/lib下,之后建立libcrypto.so.1.0.0的软连接:
1.@ubuntu:~$ cp openwrt/staging_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/usr/lib/libcrypto.so.1.0.0 openwrt/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/mipsel-openwrt-linux/lib
2.@ubuntu:~$ cd openwrt/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/mipsel-openwrt-linux/lib
3.@ubuntu:~/openwrt/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/mipsel-openwrt-linux/lib$ ln -s libcrypto.so.1.0.0 libcrypto.so
2.由于交叉编译器不包含openssl的头文件,所以从openwrt的staging_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/usr/include下拷贝openssl到openwrt的staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/mipsel-openwrt-linux/include下:
1.@ubuntu:~$ cp openwrt/staging_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/usr/include/openssl openwrt/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/mipsel-openwrt-linux/include
3.由于交叉编译后加密算法中的迭代次数页大小等会改变,所以修改sqlcipher-master/src下的crypto.so crypto.h crypto_impl.c
① 修改crypto.so中大约530行处:
1.default:
2. sqlcipher_set_default_pagesize(4096);
3. sqlcipher_set_default_hmac_algorithm(SQLCIPHER_HMAC_SHA512);
4. sqlcipher_set_default_kdf_algorithm(SQLCIPHER_PBKDF2_HMAC_SHA512);
5. sqlcipher_set_default_kdf_iter(256000);
6. sqlcipher_set_default_use_hmac(1);
7. break;
修改为
1.default:
2. sqlcipher_set_default_pagesize(1024);
3. sqlcipher_set_default_hmac_algorithm(SQLCIPHER_HMAC_SHA1);
4. sqlcipher_set_default_kdf_algorithm(SQLCIPHER_PBKDF2_HMAC_SHA1);
5. sqlcipher_set_default_kdf_iter(4000);
6. sqlcipher_set_default_use_hmac(1);
7. break;
② 修改crypto.h中大约80行:
1.#define PBKDF2_ITER 256000
修改为
1.#define PBKDF2_ITER 4000
③ 修改crypto_impl.c中大约50行处
1.static volatile int default_page_size = 4096;
2.static volatile int default_plaintext_header_sz = 0;
3.static volatile int default_hmac_algorithm = SQLCIPHER_HMAC_SHA512;
4.static volatile int default_kdf_algorithm = SQLCIPHER_PBKDF2_HMAC_SHA512;
修改为
1.static volatile int default_page_size = 1024;
2.static volatile int default_plaintext_header_sz = 0;
3.static volatile int default_hmac_algorithm = SQLCIPHER_HMAC_SHA1;
4.static volatile int default_kdf_algorithm = SQLCIPHER_PBKDF2_HMAC_SHA1;
4.交叉编译出适合mips的sqlcipher头文件动态库:
1.@ubuntu:~$ mkdir /home/zhengzheng/sqlcipher-master/install2
2.@ubuntu:~$ cd sqlcipher-master/
3.@ubuntu:~/sqlcipher-master$ ./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC" LDFLAGS="-lcrypto" --prefix=/home/zhengzheng/sqlcipher-master/install2 --target=mipsel-openwrt-linux --host=mipsel-openwrt-linux LD=mipsel-openwrt-linux-ld
4.@ubuntu:~/sqlcipher-master$ make
5.@ubuntu:~/sqlcipher-master$ make install
5.验证结果,手写个c文件测试,交叉编译test.c:
1.@ubuntu:~$ mipsel-openwrt-linux-gcc -g -L /home/zhengzheng/sqlcipher-master/install2/lib/ -I /home/zhengzheng/sqlcipher-master/install2/include/sqlcipher/ -lsqlcipher test.c -o test
6.将linux下的libsqlcipher.so.0.8.6拷到mips上的usr/lib下,再建立软连接,即可运行编译好的可执行文件生成加密数据库:
1.root@LoRa_GW:~# cd /usr/lib
2.root@LoRa_GW:~# ln -s libsqlcipher.so.0.8.6 libsqlcipher.so.0
1.安装readline依赖库:
1.@ubuntu:~$ wget -c ftp://ftp.gnu.org/gnu/readline/readline-7.0.tar.gz
2.@ubuntu:~$ tar -zxvf readline-7.0.tar.gz
3.@ubuntu:~$ cd readline-7.0
4.@ubuntu:~readline-7.0$ ./configure
5.@ubuntu:~readline-7.0$ make && make installl
2.安装lua5.1.5:
1.@ubuntu:~$ curl -R -O http://www.lua.org/ftp/lua-5.1.5.tar.gz
2.@ubuntu:~$ tar zxf lua5.1.5.tar.gz
3.@ubuntu:~$ cd lua-5.1.5
4.@ubuntu:~lua-5.1.5$ make linux
5.@ubuntu:~lua-5.1.5$ make install
3.下载luasql,改源码
① 下载解压
1.@ubuntu:~$ git clone https://github.com/keplerproject/luasql.git
2.@ubuntu:~$ unzip luasql-master
② 打开/luasql-master/src/ls_sqlite3.c,在env_connect函数中
添加:
1.const char *keynumber;
2.keynumber= luaL_checkstring(L,3);
在if(res!=SQLITE_OK){…return 2;}后添加:
1.else
2. {
3. if(sqlite3_key(conn,keynumber,加密位数)!=SQLITE_OK)
4. {
5. return 0;
6. }
7. }
4.修改/luasql-master/config中路径:
①
1.PREFIX ?= /usr
2.LUA_SYS_VER ?= 5.2
3.LUA_INC ?= $(PREFIX)/include/lua/$(LUA_SYS_VER)
修改为
1.PREFIX ?= /usr/local
2.LUA_SYS_VER ?= 5.1
3.LUA_INC ?= $(PREFIX)/include
②
1.# - SQLite3
2.DRIVER_LIBS_sqlite3 ?= -L/opt/local/lib -lsqlite3
3.DRIVER_INCS_sqlite3 ?= -I/opt/local/include
修改为
1.# - SQLite3
2.DRIVER_LIBS_sqlite3 ?= -L/home/zhengzheng/sqlcipher-master/installt1/lib -lsqlcipher
3.DRIVER_INCS_sqlite3 ?= -I/home/zhengzheng/sqlcipher-master/install1/include
5.编译安装:
1.@ubuntu:~/luasql-master$ make sqlite3
2.@ubuntu:~/luasql-master$ make install
即可在luasql-master/src下生成支持lua访问的sqlite3.so
1.修改luasql-master/config:
①
1.# - SQLite3
2.DRIVER_LIBS_sqlite3 ?= -L/opt/local/lib -lsqlite3
3.DRIVER_INCS_sqlite3 ?= -I/opt/local/include
修改为
1.# - SQLite3
2.DRIVER_LIBS_sqlite3 ?= -L/home/zhengzheng/sqlcipher-master/install2/lib -lsqlcipher
3.DRIVER_INCS_sqlite3 ?= -I/home/zhengzheng/sqlcipher-master/install2/include
②
1.CC=gcc
修改为
1.CC=mipsel-openwrt-linux-gcc
2.重新编译
1.@ubuntu:~$ cd luasql-master/src
2.@ubuntu:~/luasql-master/src$ rm sqlite3.so
3.@ubuntu:~/luasql-master/src$ rm luasql.o
4.@ubuntu:~/luasql-master/src$ cd ../
5.@ubuntu:~/luasql-master$ make sqlite3
6.@ubuntu:~/luasql-master$ make install
3.将sqlite3.so拷贝进mips下的usr/lib/lua/5.1/luasql中
1.sqlite3对数据库加密用c语言开源项目wxSQLite3实现
2.sqlcipher的移植