Windows下编译sqlcipher4的shell版本
越来越多的应用开始接入SQLCipher4了,虽然在Windows上有工具可以打开,但是没法使用脚本解密,也就不能实现自动化。
在网上找了很久都没有找到4的编译版本,因此自己找资料编译一下。
准备
- 安装openssl,并配置环境变量
OPENSSSL_CONFIG
,值为C:\Program Files\OpenSSL-Win64\bin\openssl.cfg
(前面为你自己的安装目录,建议是按照默认的来),同时将bin
目录添加到环境变量,以启用openssl
命令
- 安装TCL
- 安装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.exe
和sqlite3.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;"])