关于sqlite3 加密
一、相关加密用到的sqlcipher
1.1 sqlcipher 是一个数据库加密的开源库
我这边是使用的docker镜像,镜像地址: https://hub.docker.com/r/pallocchi/sqlcipher
加密格式
docker run -v <workdir>:/sqlcipher pallocchi/sqlcipher sqlenc <db-plain> <db-encrypted> <PASSPHRASE>
执行案例 密码是test, 在当前目录下执行,当前目录有my.db 未加密的库
docker run --platform linux/amd64 -it --rm -v ${PWD}/databases:/sqlcipher pallocchi/sqlcipher sqlenc my.db my-encrypted.db test
1.2 验证加密库
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 测试代码
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
}
没有错误说明就是链接成功了