在 Windows 上使用 SQLCipher 编译 SQLite

Let*_*Ask 4 sqlite security encryption sqlcipher

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

  1. 开放式SSL
  2. 明威
  3. ActiveState Perl
  4. tcltk/tclsh
  5. 管理系统
  6. 视觉工作室
  7. 赛格温

在以上所有内容中,我只安装了 Visual Studio 2008。我正在使用 Windows 7。

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

sne*_*rch 5

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

就个人而言,我会在 SQLCipher 源档案和它包含的 SQLite 版本之间做一个差异(从 VERSION 文件判断,对于 SQLCipher 1.8.2,这似乎是 SQLite 3.7.2) - 这应该给出一个想法,如果任何,都是对源 SQLite 文件以及 SQLCipher 特有的列表文件完成的。

为了避免手动构建 OpenSSL 的麻烦,您可以获取预构建的版本,这样您就可以摆脱 Perl 依赖项(iirc OpenSSL 使用 Visual C++ 构建得很好,所以 MingW 不应该是一个依赖项)。

如果SQLCipher 作者没有故意将他的特定代码部分与 SQLite 分离(他可能有,通过出售 win32 二进制文件赚取一些钱),您将能够接受他的更改并结合SQLite 合并版本和预构建的 OpenSSL 二进制文件,这应该可以非常轻松地插入 Visual Studio 解决方案。

当然,这意味着如果您想升级到 SQLCipher 的较新版本,您必须完成提取步骤,但这可能是值得的,除非您真的想安装一个 cygwin 开发环境只是为了能够构建这个单一的库。

或者,您可以在 *u*x 机器上执行SQLCipher的配置步骤(无论是 linux、*BSD 还是 Mac OS X shell),因为编译步骤不需要所有时髦的工具。

更新:

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

Makefile.in - 为新加密文件添加的引用。
工具/mksqlite3c.tcl:为新加密文件添加的参考。
src/pragma.c - 添加一个块,标记为 /** BEGIN_CRYPTO **/
src/pager.c - 添加一个块,标记为 /** BEGIN_CRYPTO **/
src/crypto.h - 新文件。
src/crypto.c - 新文件。

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

  • @Stephen Lombardo:公平的观点 - 请不要将我的“兑现”评论视为一种侮辱,我相信这是一件很公平的事情,即使我认为最终往往是可怜的 Windows 开发人员是一种耻辱痛苦 :) (4认同)