SQLite3:对SQLite3加密,其中sqleet依赖
目录
一、sqleet 和 SQLite3MultipleCiphers
二、编译及使用 sqleet
2.1)clone sqleet代码
2.2)编译 sqleet
2.3)使用 sqleet 加密 sqlite3数据库
三、编译及使用 SQLite3MultipleCiphers
3.1)clone SQLite3MultipleCiphers 代码
3.2)编译 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 # 退出数据库