C# Sqlite数据库加密
sqlite官方的数据库加密是收费的,而且比较贵。
幸亏微软提供了一种免费的方法。
1 sqlite加密demo
这里我做了一个小的demo演示如下:
在界面中拖入数据库名、密码、以及保存的路径
比如我选择保存路径桌面的sqlite目录,数据库名guigutool.db,密码1234
点创建数据库。
我们在桌面文件夹sqlite看到guigutool.db
然后向其中插入
2.开发过程
2.1 通过Nuget安装依赖包
Microsoft.Data.Sqlite.Core
SQLitePCLRaw.bundle_e_sqlcipher
Dapper
2.2 新建项目Sqlite工具箱
在Form中拖入控件这里就省略了。
2.3 建立连接过程
static SqliteConnection conn = null;
private void getConn()
{
string dbpath = txt_path.Text;
string dbname = txt_dbname.Text;
string pwd = txt_pwd.Text;
string dbpathConn = Path.Combine(@"Data Source=" dbpath, dbname);
string connString = new SqliteConnectionStringBuilder(dbpathConn)
{
Mode = SqliteOpenMode.ReadWriteCreate,
Password = pwd
}.ToString();
if (conn != null)
{
conn.Dispose();
}
conn = new SqliteConnection(connString);
}
2.4 创建数据库
创建数据库时,会自动创建一个测试表User
private void btn_createdb_Click(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(txt_dbname.Text) || String.IsNullOrEmpty(txt_pwd.Text))
{
MessageBox.Show("请输入数据库名和密码");
return;
}
string dbFullPath = Path.Combine(txt_path.Text, txt_dbname.Text);
ShowInfo(txtInfo, dbFullPath);
if (File.Exists(dbFullPath))
{
MessageBox.Show("该数据库已存在,不能创建");
return;
}
getConn();
if (conn.State == System.Data.ConnectionState.Closed)
{
conn.Open();
var createTable = @"CREATE table if not exists ""User"" (""Id"" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,""name"" TEXT,""age"" INTEGER);";
var result = conn.Execute(createTable);
conn.Close();
ShowInfo(txtInfo, "数据库:" this.txt_path.Text txt_dbname.Text "已创建成功,并插入了测试表User");
}
}
2.5 插入记录
private void btn_insert_Click(object sender, EventArgs e)
{
getConn();
if (conn.State == System.Data.ConnectionState.Closed)
{
conn.Open();
var name = GenerateSurname();
var age = GenerateAge();
var insertSql = $@"INSERT INTO ""main"".""User""(name,age) VALUES (""{name}"", {age});";
int result = conn.Execute(insertSql);
conn.Close();
ShowInfo(txtInfo, $"插入记录成功==> Name:{name} Age:{age} ");
}
}
2.6 从数据库中查询记录
private void btn_query_Click(object sender, EventArgs e)
{
getConn();
if (conn.State == System.Data.ConnectionState.Closed)
{
conn.Open();
var name = GenerateSurname();
var age = GenerateAge();
var selectSql = "select id,name,age from main.User;";
var users = conn.Query<User>(selectSql).ToList();
ShowInfo(txtInfo, $"================ 查询db[{txt_dbname.Text}]到以下记录:===================");
foreach (var user in users)
{
ShowInfo(txtInfo, $"Id:{user.Id} Name:{user.Name} Age:{user.Age} ");
}
ShowInfo(txtInfo, $"=============== 共{users.Count} 条 ================");
conn.Close();
}
}
3 如何使用Navicat打开创建的数据库
将Navicat目录下创建一个备份文件夹sqlite3_bak, 然后将sqlite3.dll文件(大约910KB)移动到备份文件夹中。
将e_sqlcipher.dll(1763KB)包拷贝到navicat 目录下,重命名为sqlite3.dll
然后在navicat中新建SQLite连接。
这里选择我们在桌面创建的guitutool.db文件。
(这里下的连接测试,无论是否加密,都会显示连接成功的,但是实际打开数据库时,如果不输入密码会提示错误。)
然后选择高级,在这里输入密码。
这时候连接,就可以打开了。
比如我手工通过navicat添加一条记录。
然后再选择Sqlite工具箱查询:
即可查询到。
总结一下
使用e_sqlcipher.dll替代sqlite3.dll,可以通过navicat来方便数据的管理。
e_sqlcipher.dll文件在我们的源程序的Debug目录下,大小月1763KB,具体参考下面。
SqliteBox\bin\Debug\net7.0-windows\runtimes\win-x64\native\
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfhehgf
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13