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
}

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

相关推荐
PaperData15 分钟前
2000-2025年《中国县域统计年鉴》pdf+excel版(附赠面板数据)
数据库·人工智能·数据分析·pdf·经管
冷小鱼21 分钟前
从关系模型(SQL)基石到AI与信创时代的智能查询语言
数据库·sql
LLON erva31 分钟前
Redis-配置文件
数据库·redis·oracle
童话ing32 分钟前
【Redis】026 互联网大厂 Redis 面试高频题
数据库·redis·面试
钰衡大师33 分钟前
Activiti 7 工作流技术文档
java·数据库·spring boot
Treh UNFO38 分钟前
nginx的重定向
大数据·数据库·nginx
jvvz afqh1 小时前
mysql用户名怎么看
数据库·mysql
eDEs OLDE1 小时前
CC++链接数据库(MySQL)超级详细指南
c语言·数据库·c++
EXnf1SbYK1 小时前
Redis分布式锁进阶第八篇:锁超时乱序深度踩坑 + 看门狗失效真实溯源 + 业务长耗时标准化兜底方案
数据库·redis·分布式
EXnf1SbYK1 小时前
Redis分布式锁进阶第十一篇
数据库·redis·分布式