当前位置: 首页 > news >正文

【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 数据库,因为可以用这个工具生成一个加密的数据库,之后你就可以用来测试。

安装
apt-get install 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 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. 连接属性页签添加连接属性

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

    KeyValue
    ciphersqlcipher
    fast_kdf_iter2
    hmac_algorithm0
    hmac_pgno1
    hmac_salt_mask0x3a
    hmac_user1
    kdf_iter64000
    legacy3
    legacy_page_size1024
    key用来加密数据库的密钥

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

    主要是 keylegacy_page_size 这两个比较重要

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

    Parameterv4v3v2v1
    kdf_iter2560006400040004000
    fast_kdf_iter2222
    hmac_use1110
    hmac_pgno111/
    hmac_salt_mask0x3a0x3a0x3a/
    legacy4321
    legacy_page_size4096102410241024
    kdf_algorithm2000
    hmac_algorithm2000
    plaintext_header_size0///
连接数据库

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

在这里插入图片描述

相关文章:

  • Java基础16(集合框架 List ArrayList容器类 ArrayList底层源码解析及扩容机制)
  • C++ unique_ptr
  • ESP8266发送WOL幻数据包实现电脑远程唤醒
  • <router-view />标签的理解
  • mysql预置的数据库
  • 微服务迁移、重构最佳经验
  • Effective C++ 改善程序与设计的55个具体做法笔记与心得 4
  • 【笔记】复制Edge的网址粘贴后自动变成中文标题超链接
  • ChatGPT中文镜像网站分享
  • 【镜像制作】制作k8s的yaml配置的备份镜像
  • C++初学者指南第一步---10.内存(基础)
  • Hive笔记-3
  • OpenCV--Mat属性和深浅拷贝
  • 前端开发之浏览器垃圾回收机制
  • Redis分片集群搭建
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • E-HPC支持多队列管理和自动伸缩
  • javascript从右向左截取指定位数字符的3种方法
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • python大佬养成计划----difflib模块
  • spark本地环境的搭建到运行第一个spark程序
  • Spring核心 Bean的高级装配
  • SQL 难点解决:记录的引用
  • 动态魔术使用DBMS_SQL
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 基于Android乐音识别(2)
  • 每天10道Java面试题,跟我走,offer有!
  • 浅谈web中前端模板引擎的使用
  • 驱动程序原理
  • 让你的分享飞起来——极光推出社会化分享组件
  • 如何使用 JavaScript 解析 URL
  • 使用parted解决大于2T的磁盘分区
  • 我的业余项目总结
  • gunicorn工作原理
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​2020 年大前端技术趋势解读
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • #14vue3生成表单并跳转到外部地址的方式
  • #android不同版本废弃api,新api。
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • $.ajax中的eval及dataType
  • $jQuery 重写Alert样式方法
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (AngularJS)Angular 控制器之间通信初探
  • (二)原生js案例之数码时钟计时
  • (附源码)ssm高校实验室 毕业设计 800008
  • (蓝桥杯每日一题)love
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。