Ubuntu 下编译 SQLCipher 4.8.0(支持 OpenSSL 3)全流程教程
本教程适用于 Ubuntu 20.04 / 22.04,讲解如何从源码编译 OpenSSL 3.0.13 和 SQLCipher 4.8.0,构建一个支持 AES 加密的 sqlite3
工具。
目录
- 编译目标
- 环境准备
- 安装 OpenSSL 3.x
- 编译 SQLCipher 4.8.0
- 测试 SQLCipher 加密功能
- 常见问题与说明
编译目标
- 构建 SQLCipher 4.8.0
- 启用 OpenSSL 3.x 提供的加密功能
- 安装到
/opt/sqlcipher-4.8.0
- 可执行工具支持
PRAGMA key='xxx'
加密/解密操作
环境准备
安装必要工具:
sudo apt update
sudo apt install -y build-essential wget tar tcl-dev
安装 OpenSSL 3.0.13
不要覆盖系统默认的 OpenSSL 1.1.x,建议安装到独立目录
/opt/openssl-3
cd ~/work_space/apps
wget https://www.openssl.org/source/openssl-3.0.13.tar.gz
tar xf openssl-3.0.13.tar.gz
cd openssl-3.0.13
./config --prefix=/opt/openssl-3
make -j$(nproc)
sudo make install
安装完成后:
- 头文件路径:
/opt/openssl-3/include
- 库文件路径:
/opt/openssl-3/lib64
编译 SQLCipher 4.8.0
第一步:下载源码
cd ~/work_space/apps
git clone https://github.com/sqlcipher/sqlcipher.git -b v4.8.0
cd sqlcipher
第二步:配置编译参数
mkdir build
cd build
../configure \
--prefix=/opt/sqlcipher-4.8.0 \
--with-tempstore=yes \
CFLAGS="-DSQLITE_HAS_CODEC -DSQLITE_EXTRA_INIT=sqlcipher_extra_init -DSQLITE_EXTRA_SHUTDOWN=sqlcipher_extra_shutdown -I/opt/openssl-3/include" \
LDFLAGS="/opt/openssl-3/lib64/libcrypto.so"
第三步:编译并安装
make -j$(nproc)
sudo make install
安装成功后可执行文件路径:
/opt/sqlcipher-4.8.0/bin/sqlite3
测试 SQLCipher 加密功能
编写测试脚本 test_sqlcipher.sh
#!/bin/bash
SQLCIPHER_BIN="/opt/sqlcipher-4.8.0/bin/sqlite3"
DB_FILE="secret.db"
KEY="mykey"
echo "==[1] 清理旧数据库=="
rm -f "$DB_FILE"
echo "==[2] 创建加密数据库=="
$SQLCIPHER_BIN $DB_FILE "PRAGMA key='$KEY'; CREATE TABLE users(id INTEGER PRIMARY KEY, name TEXT);"
echo "==[3] 插入数据=="
$SQLCIPHER_BIN $DB_FILE "PRAGMA key='$KEY'; INSERT INTO users(name) VALUES('Alice'), ('Bob');"
echo "==[4] 查询数据=="
$SQLCIPHER_BIN $DB_FILE "PRAGMA key='$KEY'; SELECT * FROM users;"
echo "==[5] 尝试用错误的 key 查询=="
$SQLCIPHER_BIN $DB_FILE "PRAGMA key='wrongkey'; SELECT * FROM users;"
echo "== 测试完成 =="
执行测试脚本
chmod +x test_sqlcipher.sh
./test_sqlcipher.sh
预期输出示例:
==[1] 清理旧数据库==
==[2] 创建加密数据库==
==[3] 插入数据==
==[4] 查询数据==
1|Alice
2|Bob
==[5] 尝试用错误的 key 查询==
Error: file is not a database
== 测试完成 ==
常见说明
项目 | 内容 |
---|---|
OpenSSL | 必须为 3.x,推荐 3.0.13 |
SQLCipher | 4.8.0 版本,支持 PRAGMA key='xxx' |
编译输出 | sqlite3 ,路径为 /opt/sqlcipher-4.8.0/bin/sqlite3 |
系统兼容性 | Ubuntu 20.04 / 22.04 |
注意事项 | 不要覆盖 /usr/lib 中的系统 libcrypto |