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
}

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

相关推荐
极限实验室43 分钟前
Easysearch 磁盘水位线注意事项
数据库
月落星还在1 小时前
Redis 单线程架构:化繁为简的性能哲学
数据库·redis·架构
十五年专注C++开发1 小时前
SQLiteStudio:一款免费开源跨平台的SQLite管理工具
数据库·c++·qt·sqlite
啥都想学的又啥都不会的研究生2 小时前
Redis设计与实现-服务器中的数据库
运维·服务器·数据库·redis·笔记·缓存·性能优化
m0_748229992 小时前
redis 使用
数据库·redis·缓存
Foolforuuu2 小时前
什么样的场景适用redis?redis缓存是什么?
数据库·redis·缓存
m0_748234082 小时前
redis 清理缓存
数据库·redis·缓存
智享AI2 小时前
阿里云工作空间与Ollama(一)
数据库·阿里云·云计算
聆风吟º2 小时前
阿里云操作系统控制台实战评测:提升云资源管理与监控效率
数据库·阿里云·云计算
小馒头学python2 小时前
【阿里云】操作系统控制台——体验与测评
数据库·redis·阿里云