sqlite3 加密访问

关于sqlite3 加密

一、相关加密用到的sqlcipher

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

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
}

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python的sqlite3模块是用于操作SQLite数据库的官方模块,它本身并不提供数据库加密的功能。但是,我们可以使用其他库或方法来实现对SQLite数据库加密保护。 一种常用的方法是使用pysqlcipher3库,它是一个SQLite数据库加密扩展。使用pysqlcipher3库,我们可以为SQLite数据库设置密码,以确保只有知晓密码的用户能够访问和操作数据库。 以下是一个简单的示例代码,展示如何使用pysqlcipher3库为SQLite数据库加密: ``` import pysqlcipher3 from sqlite3 import dbapi2 as sqlite # 设置数据库加密密码 password = "my_password" # 创建或打开一个已经加密数据库 conn = sqlite.connect('encrypted_db.db') conn.execute(f"ATTACH DATABASE 'encrypted_db.db' AS encrypted KEY '{password}'") conn.execute("SELECT sqlcipher_export('encrypted')") conn.execute("DETACH DATABASE encrypted") # 对数据库中的数据进行操作 cursor = conn.cursor() cursor.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)") cursor.execute("INSERT INTO users (name) VALUES ('John')") cursor.execute("SELECT * FROM users") print(cursor.fetchall()) # 关闭数据库连接 conn.close() ``` 在上面的示例中,我们首先导入pysqlcipher3库。然后,我们设置了一个密码,用于加密数据库。接下来,我们使用`sqlite3.connect()`方法连接数据库,并执行一系列操作,包括创建表、插入数据和查询数据。最后,我们关闭数据库连接。 需要注意的是,使用pysqlcipher3库时,需要先安装相应的依赖库和工具,如OpenSSL、SQLCipher等。具体的安装步骤可以参考pysqlcipher3的官方文档。 除了使用pysqlcipher3库,我们还可以使用其他第三方库或工具实现SQLite数据库加密。例如,可以使用sqlcipher库、ApSW库以及其他第三方库。在选择使用哪个库时,需要考虑其兼容性、易用性以及所提供的功能和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gitxuzan_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值