在Windows上使用SQLCipher编译SQLite

时间:2010-12-04 10:14:23

标签: security sqlite encryption sqlcipher

我正在关注this教程,在Windows上使用SQLCipher编译SQLite。我对编译的先决条件感到困惑。我发现我需要安装以下代码来编译它:

  1. OpenSSL的
  2. MinGW
  3. ActiveState Perl
  4. TclTk / tclsh
  5. MSYS
  6. Visual Studio
  7. Cygwin的
  8. 在上述所有内容中,我只安装了Visual Studio 2008。我正在使用Windows 7。

    在Windows上使用SQLCipher编译SQLite的确切先决条件是什么?

2 个答案:

答案 0 :(得分:4)

似乎SQLCipher作为SQLite源代码+修改的结帐分发,通过快速查看来判断 - 这是多文件版本而不是“合并”。因此,您需要一个能够构建SQLite源的环境,这意味着一堆unixy应用程序。

就个人而言,我会在SQLCipher源文件和它包含的SQLite版本之间做差异(对于SQLCipher 1.8.2,似乎是SQLite 3.7.2,根据VERSION文件判断) - 这应该给出一个想法对源SQLite文件以及特定于SQLCipher的列表文件进行修改(如果有的话)。

为了避免手动构建OpenSSL的麻烦,您可以获取预先构建的版本,这会使您厌倦Perl依赖项(使用Visual C ++构建iirc OpenSSL,因此MingW不应该是依赖项)。

如果,SQLCipher作者没有故意将他的特定代码部分从SQLite中分离出来(他可能拥有,通过销售win32二进制文件赚钱),你就是能够接受他的更改,并结合SQLite合并版本和预构建的OpenSSL二进制文件,这将使Visual Studio解决方案中的一个非常简单的插入。

当然这意味着如果你想升级到更新版本的SQLCipher,你将不得不经历提取步骤,但它可能是值得的,除非你真的想要安装一个cygwin开发环境能够构建这个单独的库。

或者,您可以在* u * x框(无论是linux,* BSD还是Mac OS X shell)上执行SQLCipher的 configure 步骤,因为 compile 步骤不应该要求所有时髦的工具。

更新:

我检查了SQLite的[版本3.7.2] [http://www.sqlite.org/src/info/42537b6056]并针对SQLCipher 1.1.8发行版运行了一个差异,看起来非常合理提取修改部分的任务:

Makefile.in - references added for the new crypto files.
tool/mksqlite3c.tcl: references added for the new crypto files.
src/pragma.c - one added block, marked /** BEGIN_CRYPTO **/
src/pager.c - one added block, marked /** BEGIN_CRYPTO **/
src/crypto.h - new file.
src/crypto.c - new file.

此外,仅仅为了获得AES加密支持而依赖OpenSSL似乎相当过度 - 基于SQLCipher构建新的东西以使用专用(并且更小)的AES包会更好。

答案 1 :(得分:4)

在Windows上编译SQLCipher所需的最小设置是:

  1. OpenSSL,无论是源代码还是二进制文件
  2. 表单Perl - 可选,仅在构建OpenSSL
  3. 时才需要
  4. MinGW / MSYS - 需要配置SQLCipher
  5. Tcl - SQLite构建系统需要构建合并代码
  6. Visual Studio - 构建项目
  7. 使用线程中的步骤,您可以直接创建DLL或生成合并以包含在项目中。

    如果您想保存所有这些步骤和时间,只需支付少量费用,您还可以从http://sqlcipher.net/downloads的网站获得预编译的SQLCipher Windows二进制文件。这些二进制销售是互利的,因为它们可以帮助您更快地开展工作,并且它们有助于支持项目。