sqlcipher自己编译

5 篇文章 0 订阅

问题的提出

sqlcipher是sqlite的加密版本,提供源代码,但是在编译时,尤其是在编译windows版本时,需要一些技巧。

1.sqlite和sqlcipher的下载

1.1sqlite源码下载

sqlite可以从https://www.sqlite.org上下载最新版本。amalgamation版即为整合版,把所有的c源码都集中到了sqlite3.c文件中去,工程源代码只包含sqlite3.c, sqlite3.h, shell.c,sqlite3ext.h。而完整的需要使用tcl编译后,才能生成这4个文件。sqlcipher是在完整的基础上开发的。
如果需要下载之前的某个版本,使用fossil更加简便。sqlite网站上提供了fossil的windows,mac和linux版,根据自己使用的平台下载即可。

fossil clone http://www.sqlite.org/cgi/src sqlite.fossil

使用上述命令,将sqlite源代码保存到sqlite.fossil文件。

fossil open sqlite.fossil

将当前最新版本展开到当前目录下。

fossil update version-3.27.2

上面命令行,获取3.27.2版本到当前目录。

1.2 sqlcipher下载

下载网址,https://www.zetetic.net/sqlcipher。当然,如果您的后面有位多金的老板,也可以直接购买编译好的版本。源码保存在github上,地址如下:

git clone https://github.com/sqlcipher/sqlcipher.git

2. 编译

无论是sqlite还是sqlcipher,在linux上编译都非常简单。编译sqlite,只需按照readme中的方法编译即可。编译sqlcipher,在linux(本人Ubuntu)上测试,只需配置configure时,增加SQLITE_HAS_CODEC和SQLITE_TEMP_STORE=2,就可以正常编译出有加密功能的sqlite3可执行文件。

2.1 在windows上编译sqlite

假设完成的sqlite源代码保存在./sqlite文件夹中,那么,在当前路径下,创建bld文件夹,cd到该文件夹中,执行如下命令。

        mkdir bld
        cd bld
        nmake /f ..\sqlite\Makefile.msc TOP=..\sqlite
        nmake /f ..\sqlite\Makefile.msc sqlite3.c TOP=..\sqlite
        nmake /f ..\sqlite\Makefile.msc sqlite3.dll TOP=..\sqlite
        nmake /f ..\sqlite\Makefile.msc sqlite3.exe TOP=..\sqlite
        nmake /f ..\sqlite\Makefile.msc test TOP=..\sqlite

2.2 在windows上编译sqlcipher

sqlcipher使用了openssl的加密算法,因此,需要下载编译openssl库文件。对openssl编译后,生成libeay32.lib和ssleay32.lib。
修改Makefile.msc文件。

2.2.1 修改TCC和RCC,增加加密配置项

TCC = $(TCC) -DSQLITE_HAS_CODEC -DSQLITE_TEMP_STORE=2
RCC = $(RCC) -DSQLITE_HAS_CODEC -DSQLITE_TEMP_STORE=2

2.2.2 修改TCC和RCC,增加openssl包含路径

TCC = $(TCC) -DSQLITE_OS_WIN=1 -I. -I$(TOP) -I$(TOP)\src -I"path to openssl include" -fp:precise
RCC = $(RC) -DSQLITE_OS_WIN=1 -I. -I$(TOP) -I$(TOP)\src -I"path to openssl include" $(RCOPTS) $(RCCOPTS)

2.2.3 修改LTLIBPATHS项,增加openssl库文件所在路径

LTLIBPATHS = $(LTLIBPATHS) /LIBPATH:'path to openssl lib'

2.2.4 修改 ( S Q L I T E 3 D L L ) 和 (SQLITE3DLL)和 (SQLITE3DLL)(SQLITE3EXE),在后面追加如下库文件

libeay32.lib ssleay32.lib Advapi32.lib User32.lib Gdi32.lib

$(SQLITE3DLL):	$(LIBOBJ) $(LIBRESOBJS) $(CORE_LINK_DEP)
   $(LD) $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) /DLL $(CORE_LINK_OPTS) /OUT:$@ $(LIBOBJ) $(LIBRESOBJS) $(LTLIBS) $(TLIBS) libeay32.lib ssleay32.lib Advapi32.lib User32.lib Gdi32.lib
$(SQLITE3EXE):	shell.c $(SHELL_CORE_DEP) $(LIBRESOBJS) $(SHELL_CORE_SRC) $(SQLITE3H)
	$(LTLINK) $(SHELL_COMPILE_OPTS) $(READLINE_FLAGS) shell.c $(SHELL_CORE_SRC) \
		/link $(SQLITE3EXEPDB) $(LDFLAGS) $(LTLINKOPTS) $(SHELL_LINK_OPTS) $(LTLIBPATHS) $(LIBRESOBJS) $(LIBREADLINE) $(LTLIBS) $(TLIBS) libeay32.lib ssleay32.lib Advapi32.lib User32.lib Gdi32.lib

通过如上修改Makefile.msc后,使用与sqlite相同的nmake指令,可以编译出sqlite3.exe文件

3 使用

在命令行输入sqlite3.exe,进入sqlite>命令行。输入.help,显示可以属于的命令,都以.开头。

c:\temp\sqlcipher-master\build>sqlite3.exe
SQLCipher version 3.27.2 2019-02-25 16:06:06
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .open test.db
sqlite> .tables
sqlite> PRAGMA key='hello' ;
sqlite> create table encrypted (id integer, name text);
sqlite> .tables
encrypted
sqlite> .schema
CREATE TABLE encrypted (id integer, name text);
sqlite> select * from encrypted;
sqlite> .q

上面是使用sqlcipher创建一个空白表的示例。密码为“hello”,使用二进制文件编辑器,打开test.db文件,发现文件是加密后的无规律文件。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要进行 SQLCipher 的交叉编译,你需要以下几个步骤: 1. 下载 SQLCipher 源代码:前往 SQLCipher 的官方网站(https://www.zetetic.net/sqlcipher/)下载最新的源代码包,并将其解压到你的开发环境中。 2. 获取交叉编译工具链:获取适用于目标平台的交叉编译工具链。这可能是由交叉编译工具链的提供者(如 Linaro、Emdebian、Buildroot 等)或特定硬件供应商提供的。确保你的交叉编译工具链支持目标平台的架构。 3. 设置环境变量:设置以下环境变量,以便在交叉编译过程中使用正确的工具链和库路径: - `CROSS_COMPILE`:设置为交叉编译工具链的前缀,例如 `arm-linux-gnueabi-`。 - `CC`:设置为交叉编译工具链的 C 编译器路径,例如 `${CROSS_COMPILE}gcc`。 - `CXX`:设置为交叉编译工具链的 C++ 编译器路径,例如 `${CROSS_COMPILE}g++`。 - `SYSROOT`:设置为目标平台的根文件系统路径,通常在交叉编译工具链中可以找到。 4. 配置编译选项:进入 SQLCipher 源代码目录,并执行以下命令进行配置: ``` ./configure --host=<交叉编译工具链前缀> --enable-tempstore=yes CFLAGS="-Os" LDFLAGS="-Wl,-rpath-link=<库路径>" --prefix=<安装路径> ``` - 将 `<交叉编译工具链前缀>` 替换为你的交叉编译工具链前缀,例如 `arm-linux-gnueabi-`。 - 将 `<库路径>` 替换为目标平台的库路径,通常在交叉编译工具链的 `lib` 目录中可以找到。 - 将 `<安装路径>` 替换为你希望安装 SQLCipher 的路径。 5. 编译和安装:执行以下命令进行编译和安装 SQLCipher: ``` make make install ``` 这将使用交叉编译工具链编译 SQLCipher,并将结果安装到指定的安装路径中。 完成这些步骤后,你应该能够成功地进行 SQLCipher 的交叉编译。请注意,具体的步骤可能因你使用的交叉编译工具链和目标平台而有所不同。确保参考相关文档和资源来获取更详细的指导。 祝你好运!如有更多问题,请随时提问。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值