【Go】用 DBeaver、db browser 和 SqlCipher 读取 SqlCipher 数据库

本文档主要描述如何用 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 数据库,因为可以用这个工具生成一个加密的数据库,之后你就可以用来测试。

安装
bash 复制代码
apt-get install sqlcipher
创建 SqlCipher 数据库
bash 复制代码
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 数据库
bash 复制代码
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 SQLiteDB 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。

  1. 进入驱动管理器,顶部菜单栏数据库 -> 驱动管理器

  2. 点击新建,会看到如下页面,创建新驱动

  1. 设置页签按照如下信息填写:

    • 驱动名称:SqlCipherV3

    • 驱动类型:Generic

    • 类名:org.sqlite.JDBC

    • URL 模板:jdbc:sqlite:{file}

    • 其他的如果你有特殊的可以填写,上面 4 个填了就可以了

  1. 页面:

    • 点击添加文件,选择你刚才下载的 jar 包

    • 点击找到类,选择 org.sqlite.JDBC

      注意:如果点击后,下拉框没有可选项的,可以先点击确定,然后再点击编辑进来,再次点击一下找到类,就可以选择了。

  1. 连接属性页签添加连接属性

    在名称那一列右键,可以添加新属性,添加如下属性

    Key Value
    cipher sqlcipher
    fast_kdf_iter 2
    hmac_algorithm 0
    hmac_pgno 1
    hmac_salt_mask 0x3a
    hmac_user 1
    kdf_iter 64000
    legacy 3
    legacy_page_size 1024
    key 用来加密数据库的密钥

    注意,如果 legacy_page_size 要跟创建数据库时候的一致,这个问题具体见另一篇讲解 用 Go 原生以及 Gorm 读取 SQLCipher 加密数据库

    主要是 keylegacy_page_size 这两个比较重要

    如果你是不同版本的 SqlCipher 可能有些参数会不同

    Parameter v4 v3 v2 v1
    kdf_iter 256000 64000 4000 4000
    fast_kdf_iter 2 2 2 2
    hmac_use 1 1 1 0
    hmac_pgno 1 1 1 /
    hmac_salt_mask 0x3a 0x3a 0x3a /
    legacy 4 3 2 1
    legacy_page_size 4096 1024 1024 1024
    kdf_algorithm 2 0 0 0
    hmac_algorithm 2 0 0 0
    plaintext_header_size 0 / / /
连接数据库

创建好 driver 后,就可以去连接你的 SqlCipher 加密数据库。点击新建数据库连接,选择刚才创建的 SqlCipherV3 驱动。路径,就是选择你本地或者通过 url 可以获取到的 sqlite3 加密的数据库。如果属性配置错误,会报 [SQLITE_NOTADB] File opened that is not a database file (file is not a database) 的错误。这个时候就要去检查 keylegacy_page_size 有没有配对。

相关推荐
独行soc31 分钟前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘
White_Mountain1 小时前
在Ubuntu中配置mysql,并允许外部访问数据库
数据库·mysql·ubuntu
Code apprenticeship1 小时前
怎么利用Redis实现延时队列?
数据库·redis·缓存
百度智能云技术站1 小时前
广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
数据库·redis·oracle
装不满的克莱因瓶1 小时前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb
梦想平凡3 小时前
PHP 微信棋牌开发全解析:高级教程
android·数据库·oracle
TianyaOAO3 小时前
mysql的事务控制和数据库的备份和恢复
数据库·mysql
Ewen Seong3 小时前
mysql系列5—Innodb的缓存
数据库·mysql·缓存
码农老起3 小时前
企业如何通过TDSQL实现高效数据库迁移与性能优化
数据库·性能优化
夏木~5 小时前
Oracle 中什么情况下 可以使用 EXISTS 替代 IN 提高查询效率
数据库·oracle