Ubuntu 下编译 SQLCipher 4.8.0

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' 加密/解密操作

环境准备

安装必要工具:

bash 复制代码
sudo apt update
sudo apt install -y build-essential wget tar tcl-dev

安装 OpenSSL 3.0.13

不要覆盖系统默认的 OpenSSL 1.1.x,建议安装到独立目录 /opt/openssl-3

bash 复制代码
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

第一步:下载源码

bash 复制代码
cd ~/work_space/apps
git clone https://github.com/sqlcipher/sqlcipher.git -b v4.8.0
cd sqlcipher

第二步:配置编译参数

bash 复制代码
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"

第三步:编译并安装

bash 复制代码
make -j$(nproc)
sudo make install

安装成功后可执行文件路径:

bash 复制代码
/opt/sqlcipher-4.8.0/bin/sqlite3

测试 SQLCipher 加密功能

编写测试脚本 test_sqlcipher.sh

bash 复制代码
#!/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 "== 测试完成 =="

执行测试脚本

bash 复制代码
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
相关推荐
楼田莉子19 小时前
仿Muduo的高并发服务器:LoopThread模块及其ThreadPool模块
linux·服务器·c++·后端·学习
zhangfeng113319 小时前
宝塔服务器完全可以安装 Git,进行版本管理,而且非常简单
运维·服务器·人工智能·git·编程
菜鸟的日志20 小时前
【嵌入系统】嵌入式学习笔记(一)
windows·笔记·嵌入式硬件·学习·ubuntu·操作系统
南境十里·墨染春水20 小时前
linux 学习进展 网络编程 ——TCP 协议 TIME_WAIT 状态详解
linux·网络·学习
科研前沿20 小时前
SpaceOS™空间计算底座与五大自研引擎,实现多项关键技术突破
大数据·运维·人工智能·算法·重构
Qt程序员21 小时前
【无标题】
linux·c++·消息队列·共享内存·c/c++·管道·信号量
相国21 小时前
在Windows里通过WSL安装Ubuntu 22.04
linux·windows·ubuntu·wsl
太理摆烂哥21 小时前
进程调度及文件系统的管理
linux
德迅云安全-小潘1 天前
APP运营服务器配置全攻略:从选型到网络安全,你需要知道的一切
运维·服务器·web安全
许泽宇的技术分享1 天前
别再把 AI Agent 当“会聊天的脚本”:Hermes Agent 源码级拆解(架构、框架、实战、趋势,一文吃透)
java·linux·网络