Windows下编译sqlcipher4的shell版本

发布时间 2023-11-30 21:27:53作者: WXjzc

越来越多的应用开始接入SQLCipher4了,虽然在Windows上有工具可以打开,但是没法使用脚本解密,也就不能实现自动化。

在网上找了很久都没有找到4的编译版本,因此自己找资料编译一下。

准备

  1. 安装openssl,并配置环境变量OPENSSSL_CONFIG,值为C:\Program Files\OpenSSL-Win64\bin\openssl.cfg(前面为你自己的安装目录,建议是按照默认的来),同时将bin目录添加到环境变量,以启用openssl命令
  1. 安装TCL
  1. 安装Windows编译工具,建议是直接安装Visual Studio

开始

先克隆项目git clone https://github.com/sqlcipher/sqlcipher.git

编辑Makefile.msc

修改这条

TCC = $(TCC) -DSQLITE_TEMP_STORE=1

改为(路径为openssl安装路径)

TCC = $(TCC) -DSQLITE_TEMP_STORE=2 -DSQLITE_HAS_CODEC -I"C:\Program Files\OpenSSL-Win64\include"

再找到这条

# If ICU support is enabled, add the linker options for it.
#
!IF $(USE_ICU)!=0
LTLIBPATHS = $(LTLIBPATHS) /LIBPATH:$(ICULIBDIR)
LTLIBS = $(LTLIBS) $(LIBICU)
!ENDIF
# <</mark>>

在下面添加如下内容

LTLIBPATHS = $(LTLIBPATHS) /LIBPATH:"C:\Program Files\OpenSSL-Win64\lib\VC\static"
LTLIBS = $(LTLIBS) libcrypto64MT.lib libssl64MT.lib ws2_32.lib shell32.lib advapi32.lib gdi32.lib user32.lib crypt32.lib

打开vs提供的编译环境x64 Native Tools Command Prompt for VS 2022,在开始菜单中可以找到

使用cd命令切换到克隆的目录,然后执行命令nmake /f Makefile.msc进行编译

到最后会提示

结束后就可以在目录下找到sqlite3.exesqlite3.dll了,其中exe是单独的可执行文件,不用依赖,打开会显示sqlcipher,如果没有就说明编译失败

测试

随包克隆下来的还有一下测试数据库,密码都是testkey,能看到表就是成功打开了数据库

4之前的版本必须指定加密参数才可以解密

接下来就可以使用这个程序去解密数据库了,在sqlcipher的shell里执行下面的命令,会在当前目录生成解密后的数据库

ATTACH DATABASE 'dec.db' AS dec KEY '';
SELECT sqlcipher_export('dec');
DETACH DATABASE dec;

如果需要脚本执行,可以直接采用命令执行的方式(个人觉得比再编译一次pysqlcipher3要方便的多),一行解决,以python为例,只需要注意文件路径即可

subprocess.run(['sqlite3.exe','enc.db',f"PRAGMA key = {key};ATTACH DATABASE 'dec.db' AS dec KEY '';SELECT sqlcipher_export('dec');DETACH DATABASE dec;"])