本文档主要描述如何用 DBeaver、db browser 和 SqlCipher 上打开加密的 SQLite3 数据库(用 SqlCipher v3 加密)
软件版本
DBeaver:v24.1.0
SQLite-driver: sqlite-jdbc-3.46.0.0.jar
dbbrowser-for-sqlite-cipher:3.12.2
SqlCipher cli(ubuntun):3.15.2
SqlCipher(used for encrypt):v3
SqlCipher
先将如何用 SqlCipher 读取加密的 SQLite3 数据库,因为可以用这个工具生成一个加密的数据库,之后你就可以用来测试。
安装
apt-getinstall sqlcipher
创建 SqlCipher 数据库
sqlcipher encrypt-data.db
sqlite> PRAGMA key = passphrase;
sqlite> CREATE TABLE test(id INTEGER PRIMARY KEY, data TEXT);
sqlite> INSERT INTO test(data) VALUES ('Hello, World!');
sqlite> SELECT * FROM test;1|Hello, World!#这行是输出
sqlite> .exit
读取 SqlCipher 数据库
sqlcipher encrypt-data.db
sqlite> SELECT * FROM test;
Error: file is encrypted or is not a database #无法读取刚才加密的 db,需要先输入 key
sqlite> PRAGMA key = passphrase;
sqlite> SELECT * FROM test;1|Hello, World!#这行是输出
sqlite> .exit
注意,在输入 key 之后可能还需要配置,
cipher_page_size
。在创建加密数据库的时候,可能会配置特别的
cipher_page_size
,没有就是默认,像上面不需要配置就能读取。需要的话,就是
PRAGMA cipher_page_size = 4096
。
db browser
下载路径: https://sqlitebrowser.org/dl/
安装
安装包会安装
DB Browser for SQLite
和
DB Browser for SQLCipher
,可以在安装过程中勾选
DB Browser for SQLCipher
到桌面。或者安装完后,到安装目录,把
DB Browser for SQLCipher
加到桌面。
连接数据库
打开软件就很直接,点击
Open Database
,选择完 db 就会跳出下面页面。有分 3 还是 4,如果是自定义的可以去 Custom 设置。这里面有一个自己踩的坑,可以去另一篇文章看下 用 Go 原生以及 Gorm 读取 SQLCipher 加密数据库。
如果密码输入错误,或者配置错误,会一直弹这个页面。
DBeaver
因为团队用的是 DBeaver 所以后面也去找了下 DBeaver 打开 SqlCipher 加密数据库的方法,
安装
软件下载地址https://dbeaver.io/
下载 jdbc-crypt 的 jar 包
https://github.com/Willena/sqlite-jdbc-crypt/releases ,里面下载的包,遵循
sqlite-jdbc-<version>.jar
的格式。我用的版本是 3.46.0.0,不过之前试的 3.41.2.0 也是没问题的。
创建 driver
DBeaver 没有 SqlCipher 的驱动,也就是你从菜单点击新建数据库连接,出来的可选数据库不支持 SqlCipher。
- 进入驱动管理器,顶部菜单栏数据库 -> 驱动管理器
- 点击新建,会看到如下页面,创建新驱动
- 在
设置
页签按照如下信息填写:- 驱动名称:SqlCipherV3- 驱动类型:Generic- 类名:org.sqlite.JDBC- URL 模板:jdbc:sqlite:{file}- 其他的如果你有特殊的可以填写,上面 4 个填了就可以了
- 在
库
页面:- 点击添加文件
,选择你刚才下载的 jar 包- 点击找到类
,选择org.sqlite.JDBC
。> 注意:如果点击后,下拉框没有可选项的,可以先点击确定,然后再点击编辑进来,再次点击一下>> 找到类>
> ,就可以选择了。
- 在
连接属性
页签添加连接属性在名称那一列右键,可以添加新属性
,添加如下属性KeyValueciphersqlcipherfast_kdf_iter2hmac_algorithm0hmac_pgno1hmac_salt_mask0x3ahmac_user1kdf_iter64000legacy3legacy_page_size1024key****用来加密数据库的密钥> 注意,如果 legacy_page_size 要跟创建数据库时候的一致,这个问题具体见另一篇讲解 用 Go 原生以及 Gorm 读取 SQLCipher 加密数据库主要是key
和legacy_page_size
这两个比较重要如果你是不同版本的 SqlCipher 可能有些参数会不同Parameterv4v3v2v1kdf_iter2560006400040004000fast_kdf_iter2222hmac_use1110hmac_pgno111/hmac_salt_mask0x3a0x3a0x3a/legacy4321legacy_page_size4096102410241024kdf_algorithm2000hmac_algorithm2000plaintext_header_size0///
连接数据库
创建好 driver 后,就可以去连接你的 SqlCipher 加密数据库。点击新建数据库连接,选择刚才创建的 SqlCipherV3 驱动。路径,就是选择你本地或者通过 url 可以获取到的 sqlite3 加密的数据库。如果属性配置错误,会报
[SQLITE_NOTADB] File opened that is not a database file (file is not a database)
的错误。这个时候就要去检查
key
和
legacy_page_size
有没有配对。
版权归原作者 非晓为骁 所有, 如有侵权,请联系我们删除。