sqlite3 加密访问

关于sqlite3 加密

一、相关加密用到的sqlcipher

1.1 sqlcipher 是一个数据库加密的开源库

sqlcipher开源地址

我这边是使用的docker镜像,镜像地址https://hub.docker.com/r/pallocchi/sqlcipher

加密格式

shell 复制代码
docker run -v <workdir>:/sqlcipher pallocchi/sqlcipher sqlenc <db-plain> <db-encrypted> <PASSPHRASE>

执行案例 密码是test, 在当前目录下执行,当前目录有my.db 未加密的库

shell 复制代码
docker run --platform linux/amd64 -it --rm -v  ${PWD}/databases:/sqlcipher pallocchi/sqlcipher sqlenc my.db my-encrypted.db test

1.2 验证加密库

shell 复制代码
 docker run --platform linux/amd64 -it --rm -v ${PWD}:/sqlcipher pallocchi/sqlcipher sqlcipher city-encrypted.db

在cli中输入

复制代码
PRAGMA key = 'test';
.tables

如果能正常显示你的表格说明加密问题

二、用golang客户端连接测试

2.1 仓库地址

https://github.com/mutecomm/go-sqlcipher

2.2 测试代码

go 复制代码
package mydb_sqlcipher

import (
	"fmt"
	"github.com/jmoiron/sqlx"
	_ "github.com/mutecomm/go-sqlcipher/v4"
	"log"
	"net/url"
	"time"
)

var db *sqlx.DB

func Db() *sqlx.DB {
	return db
}
func InitDB(filepath string) error {
	var err error
	key := url.QueryEscape("test")
	dbname := fmt.Sprintf("%s?_pragma_key=%s&_pragma_cipher_page_size=4096", filepath, key)
	db, err = sqlx.Connect("sqlite3", dbname)
	if err != nil {
		log.Println("Error opening database:", err)
		return err
	}

	// 设置连接池
	db.SetConnMaxLifetime(4 * time.Hour)
	db.SetMaxOpenConns(10)
	db.SetMaxIdleConns(5)
	err = db.Ping()
	if err != nil {
		log.Fatalf("数据库连接失败ping:%v", err)
	}
	return nil
}

没有错误说明就是链接成功了

相关推荐
倔强的石头_2 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
冬奇Lab2 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
ClouGence3 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
无响应de神3 天前
三、用户与权限管理
数据库·mysql
麦聪聊数据3 天前
数据服务化时代:企业数据能力输出的核心路径
数据库
shushangyun_3 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
DARLING Zero two♡3 天前
【MySQL数据库】数据类型与表约束
数据库·mysql
曹牧3 天前
Oracle EXPLAIN PLAN
数据库·oracle
BD_Marathon3 天前
SQL学习指南——视图
数据库·sql
活宝小娜3 天前
mysql详细安装教程
数据库·mysql·adb