SqlCipher的编译和使用

SqlCipher的编译
编译前,先安装openssl和tcl.

(1)方法一

  • sqlcipher的源代码在https://github.com/sqlcipher/sqlcipher。
  • sqlcipher需要openssl库,根据windows平台下载32/64的openssl开发包。官方:https://wiki.openssl.org/index.php/Binaries,推荐到https://slproweb.com/products/Win32OpenSSL.html下载。
    openssl以win32版本为例,安装Win32OpenSSL-1_1_1u.exe。
  • sqlcipher编译需要先安装tcl。
  • 使用VC的命令行,生成sqlite3.c文件:nmake /f Makefile.msc sqlite3.c
  • 将libcrypto.lib libssl.lib拷贝到程序目睹d:\chane\sqlcipher1,进入VC的命令行,使用cl编译成dll库: cl
    -ID:\Program\OpenSSL-Win32\include sqlite3.c -DSQLITE_API=__declspec(dllexport) -DSQLITE_TEMP_STORE=2 -DSQLITE_HAS_CODEC /MT -link -dll -out:sqlcipher.dll -LIBPATH:D:\Program\OpenSSL-Win32\lib libcrypto.lib libssl.lib
    生成sqlcipher.dll和sqlcipher.lib,再拷贝sqlite3.h,即可使用。
  • 除此之外可以参考https://github.com/sqlitebrowser/sqlitebrowser/wiki/Win64-setup-%E2%80%94-Compiling-SQLCipher的文档进行编译。
  • 注意事项:
    sqlcipher依赖于openssl,对于动态链接(依赖于openssl的dll文件)方式,编译sqlcipher的visual
    studio版本不要求和编译openssl时使用的版本一样,但是对于静态链接openssl的方式,要求使用相同版本的编译器。

(2)方法二

  • A)进入工程目录,打开 Makefile.msc 文件。
  • B)将 -DSQLITE_TEMP_STORE 从 1 改为 2。 如下: TCC = $(TCC)
    -DSQLITE_TEMP_STORE=2 RCC = $(RCC) -DSQLITE_TEMP_STORE=2
  • C)然后在上面的下面添加:
    TCC = $(TCC) -DSQLITE_HAS_CODEC
    RCC = $(RCC) -DSQLITE_HAS_CODEC

TCC = $(TCC) -DSQLITE_ENABLE_FTS4
RCC = $(RCC) -DSQLITE_ENABLE_FTS4

TCC = $(TCC) -DSQLITE_ENABLE_JSON1
RCC = $(RCC) -DSQLITE_ENABLE_JSON1

TCC = $(TCC) -DSQLITE_ENABLE_FTS3
RCC = $(RCC) -DSQLITE_ENABLE_FTS3

TCC = $(TCC) -DSQLITE_ENABLE_FTS3_PARENTHESIS
RCC = $(RCC) -DSQLITE_ENABLE_FTS3_PARENTHESIS

TCC = $(TCC) -DSQLITE_ENABLE_FTS5
RCC = $(RCC) -DSQLITE_ENABLE_FTS5

TCC = $(TCC) -DNOCRYPT
RCC = $(RCC) -DNOCRYPT

TCC = $(TCC) -DSQLCIPHER_CRYPTO_OPENSSL
RCC = $(RCC) -DSQLCIPHER_CRYPTO_OPENSSL

  • D)添加 h 文件搜索路径:
    TCC = $(TCC) -IC:\Users\lma\Desktop\Sqlcipher\opemssl_install_1.1.1\include
    RCC = $(RCC) -IC:\Users\lma\Desktop\Sqlcipher\opemssl_install_1.1.1\include
  • E)添加 link 文件路径:
    LTLIBPATHS = $(LTLIBPATHS) /LIBPATH:C:\Users\lma\Desktop\Sqlcipher\opemssl_install_1.1.1\lib
    LTLIBS = $(LTLIBS) libcrypto.lib libssl.lib
  • F)打开 VS 自带的本机编译工具,执行:
    nmake /f Makefile.msc sqlite3.c 主要生成sqlite3.c、sqlite3.h、shell.c、sqlite3ext.h等
    nmake /f Makefile.msc 生成sqlite3.exe、sqlite3.dll、sqlite3.lib、libsqlite3.lib等

在这里插入图片描述

sqlcipher的使用

  • (1)注意事项
    这三条必须添加:
    #define SQLITE_HAS_CODEC 1 //这条不添加,sqlite3_key等函数找不到
    #include “sqlite3.h” //自定义h文件必须用双引号,不能用<>
    #pragma comment(lib, “sqlite3.lib”) //加载静态链接库
  • (2)sqlcipher不能清空密码
    网上说可以通过sqlite3_rekey(db,NULL,0)可以清空密码,这是错误的。通过查看源代码,当输入NULL或者0时,源代码不做任何操作而返回SQLITE_ERROR(就是1)。同时,不能对已存在的sqlite数据库进行加密。只能采取建立新的表,导入数据的方式来解决。方法有两种:

方法1:

A)先把数据导出:

$ sqlite3 ifood.sqlite
>.output ifood.sql
>.dump

B)创建一个新的加密的数据库:

$ sqlcipher ifood_lock.sqlite
sqlite> PRAGMA key =112233; # 设置密码

C)导入数据

>.read ifood.sql

方法2:
A)创建数据库:

 sqlcipher-shell64.exe  encrypted .db
 PRAGMA key = 'password';
 create table encrypted (id integer, name text);
 .schema
 CREATE TABLE encrypted (id integer, name text);

B)对已有数据库进行加密:

 sqlcipher-shell64.exe  universal.db
 ATTACH DATABASE 'encrypted.db' AS encrypted KEY 'password';
 SELECT sqlcipher_export('encrypted');
 DETACH DATABASE encrypted;

C)修改密码:

sqlite> PRAGMA rekey = 'newPassword’;

D)打开加密的数据库:

sqlcipher-shell64.exe encrypted .db
PRAGMA key = 'password’;
.schema
  • (3)编译版本要统一
    编译sqlcipher.dll和sqlcipher.lib时用的openssl的x86或x64版本,要与在你编写的程序编译时采取的MSVC的x86或x64版本一致。而且,如果openssl用mingw编译,则你的c程序也用mingw编译;如果openssl用msvc编译,则你的c程序也用msvc编译。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在编译Win SQLCipher时,首先需要下载SQLCipher的源代码,并准备好编译环境。接下来,可以使用Visual Studio打开一个命令提示符,进入SQLCipher的源代码目录。 为了编译SQLCipher,首先需要创建一个编译脚本。在命令提示符中使用文本编辑器创建一个名为"build.cmd"的文件,并在文件中添加以下内容: ``` @echo off set INCLUDE=C:\OpenSSL-Win32\include;%INCLUDE% set LIB=C:\OpenSSL-Win32\lib;%LIB% call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat" nmake /f Makefile.msc sqlite3.c nmake /f Makefile.msc sqlite3.dll ``` 上述代码假设OpenSSL已经在C盘下的OpenSSL-Win32目录中安装,并且Visual Studio 2019 Community Edition已经在C盘安装。如果安装路径不同,请相应地修改INCLUDE和LIB变量的值。 保存并关闭文件后,在命令提示符中运行以下命令来编译SQLCipher: ``` build.cmd ``` 编译过程可能需要一些时间,请耐心等待。一旦编译完成,将会在SQLCipher的源代码目录下生成"sqlite3.dll"文件,这是编译后的SQLCipher库。 在集成SQLCipher到自己的项目中时,只需将"sqlite3.dll"文件放置到项目的合适位置,并在代码中使用SQLCipher相关的函数和库进行开发即可。 总结起来,编译Win SQLCipher的过程需要准备好源代码以及编译环境,创建编译脚本并设置相应的环境变量,然后运行编译脚本进行编译编译完成后即可在项目中使用SQLCipher的功能。 ### 回答2: 要编译Win SQLCipher,您需要按照以下步骤进行操作: 1. 首先,确保您已经安装了必要的开发工具和依赖项,如CMake、Visual Studio等。您可以从官方网站下载并安装这些工具。 2. 下载SQLCipher源代码。您可以在SQLCipher官方网站上找到源代码的最新版本。 3. 解压源代码,并进入解压后的目录。 4. 打开命令提示符或PowerShell,并将当前目录更改为解压后的源代码目录。 5. 运行以下命令来生成Visual Studio工程文件: ``` cmake . -G "Visual Studio [版本号]" ``` 请确保将[版本号]替换为您所使用的Visual Studio版本,例如"Visual Studio 16 2019"。 6. 打开生成的Visual Studio工程文件(.sln)。 7. 在Visual Studio中,选择“Release”配置,并选择适当的目标平台(如x86或x64)。 8. 在菜单栏中,选择“生成”>“生成解决方案”来编译SQLCipher。 9. 编译完成后,在生成目录中可以找到编译后的SQLCipher库文件(如sqlite3.lib和sqlite3.dll)。将这些文件复制到您的项目中,并将其与您的应用程序一起使用。 请注意,上述步骤仅适用于Windows平台。在其他操作系统下,可能需要不同的编译步骤和工具。 ### 回答3: 编译 SQLCipher 的过程相对比较繁琐,但遵循以下步骤即可完成编译。 1. 首先,您需要下载 SQLCipher 的源代码。它可以在 SQLCipher 的官方网站上找到。确保下载与您系统兼容的版本。 2. 下一步是安装一些必要的依赖项。这些依赖项包括 C 编译器、SQLite 的开发包和 OpenSSL 的开发包。您可以使用系统的软件包管理器来安装它们。 3. 解压下载的源代码压缩包。然后,使用终端进入解压后的目录。 4. 在终端中,输入以下命令以配置编译选项: ```shell ./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC" LDFLAGS="-lcrypto" ``` 这将启用对 SQLCipher 编码的支持,并链接 OpenSSL 库。 5. 配置完成后,运行以下命令编译源代码: ```shell make ``` 此命令将开始编译 SQLCipher。这可能需要一些时间,请耐心等待。 6. 编译完成后,您可以运行以下命令将 SQLCipher 安装到系统中: ```shell make install ``` 这将将编译后的库文件和工具复制到相应的目录。 7. 最后,您可以验证 SQLCipher 安装是否成功。进入一个新的终端会话,输入以下命令: ```shell sqlcipher ``` 如果一切正常,将打开一个 SQLCipher Shell。这表明您已成功编译和安装 SQLCipher。 请注意,编译 SQLCipher 可能因不同的操作系统和环境而有所不同。上述步骤适用于大多数情况,但具体细节可能会有所不同。需要根据您的环境和需求进行相应的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值