目录
一、sqleet 和 SQLite3MultipleCiphers
三、编译及使用 SQLite3MultipleCiphers
3.1)clone SQLite3MultipleCiphers 代码
3.3)使用 SQLite3MultipleCiphers 加密 sqlite3 数据库
一、sqleet 和 SQLite3MultipleCiphers
发现两款不错的sqlite3开源加密工具:
sqleet
和
SQLite3MultipleCiphers
。
其中sqleet依赖于宏 SQLITE_HAS_CODEC 中的接口,但是这些接口只支持到sqlite-v3.31.1(
Simplify the code by removing the unsupported and undocumented SQLITE_HAS_CODEC compile-time option
),再往后的版本中 SQLITE_HAS_CODEC 宏里面的代码就都被删除了。这些接口的删除,导致了一批依赖这些接口的 sqlite3 加密软件受影响,于是就出现了支持新版 sqlite3的加密软件:SQLite3MultipleCiphers。
下面介绍一下这两款工具的使用。
二、编译及使用 sqleet
2.1)clone sqleet代码
sqleet github 地址:
https://github.com/resilar/sqleet
clone 地址:
https://github.com/resilar/sqleet.git
git clone https://github.com/resilar/sqleet.git
2.2)编译 sqleet
$ cd sqleet/
$ gcc -o sqleet sqleet.c shell.c -lpthread -ldl
2.3)使用 sqleet 加密 sqlite3数据库
打开一个新的 sqlite3的数据库文件,使用 PRAGMA key 命令设置密码。
如果是打开一个已经有数据的未加密数据库,那么需要使用 PRAGMA rekey = ‘a passphrase’ 命命令进行加密。
数据库 | 命令 | 作用 |
---|---|---|
新创建的空数据库 | key |
1、对新创建的数据库设置密码 2、进入已加密的数据库时验证密码 |
已有数据的数据库 | rekey |
1、对已加密的数据库重置密码 2、对已有数据但未加密的数据库设置密码 |
新创建一个数据库,并加密:
$ ./sqleet hello.db # 创建一个新数据库
sqlite> PRAGMA key = 'a passphrase'; # 加密这个新数据库
ok
sqlite> create table world (id int, name text);
sqlite> .q
加密一个已有数据但未加密的数据库:
$ ./sqleet hello.db
sqlite> PRAGMA rekey = 'a passphrase'; # 将一个未加密的数据库进行加密
ok
sqlite> .q
修改一个已加密数据库的密码:
$ ./sqleet hello.db
sqlite> PRAGMA key = 'a passphrase'; # 输入当前密码进行验证
ok
sqlite> PRAGMA rekey = 'another passphrase'; # 设置新的密码
ok
sqlite> .q
三、编译及使用 SQLite3MultipleCiphers
3.1)clone SQLite3MultipleCiphers 代码
SQLite3MultipleCiphers 官网地址:
https://utelle.github.io/SQLite3MultipleCiphers/
Github地址:
https://github.com/utelle/SQLite3MultipleCiphers
git clone https://github.com/utelle/SQLite3MultipleCiphers.git
3.2)编译 SQLite3MultipleCiphers
cd SQLite3MultipleCiphers/
autoreconf
mkdir build-gtk
cd build-gtk
../configure
make
编译完成后,二进制可执行文件位置:SQLite3MultipleCiphers/build-gtk/sqlite3shell
3.3)使用 SQLite3MultipleCiphers 加密 sqlite3 数据库
使用 SQLite3MultipleCiphers 编译后的命令 sqlite3shell 对数据库加密的方式和 sqleet 一样,也是通过 PRAGMA key 和 PRAGMA rekey 进行加密和重置密码。
操作过程如下:
$ ./sqlite3shell hello.db # 创建一个新的数据库
sqlite> PRAGMA key='a passphrase'; # 设置加密数据库的密码
ok # 显示 ok 说明设置密码成功
sqlite> create table world (id int, name text); # 创建一些数据
sqlite> .q # 退出数据库
$ ./sqlite3shell hello.db # 再次进入数据库,相当于进入了一个已经加密的数据库
sqlite> .tab # 在不输入密码的情况下查看当前的表
Error: file is not a database # 不输入密码的情况下,解析数据库失败
sqlite> PRAGMA key = 'a passphrase'; # 使用密码进行认证
ok # 输出 ok,说明认证成功
sqlite> .tab # 查看数据库中的表
world # 查看表成功,目前数据库中只有表 world
sqlite> .q # 退出数据库