当前位置: 首页 > news >正文

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();}}

以上就是主要的代码。
项目的完整代码可以在以下资源中下载。
https://download.csdn.net/download/wang6733284/87503163

http://www.lryc.cn/news/22318.html

相关文章:

  • 高压放大器在声波谐振电小天线收发测试系统中的应用
  • 锁相环的组成和原理及应用
  • [C++]string类模拟实现
  • 一个更适合Java初学者的轻量级开发工具:BlueJ
  • 从程序员到项目组长,要经历六重修炼
  • 我的 System Verilog 学习记录(5)
  • 多芯片设计 Designing For Multiple Die
  • 2022年全国职业院校技能大赛(中职组)网络安全竞赛试题A(10)
  • 数据结构-简介
  • python装饰器及其用法
  • Appium自动化测试之启动时跳过初始化设置
  • JavaScript DOM【快速掌握知识点】
  • 不需要高深技术,只需要Python:创建一个可定制的HTTP服务器!
  • 渗透测试常用浏览器插件汇总
  • 社区1月月报|OceanBase 4.1 即将发版,哪些功能将会更新?
  • Javascript的API基本内容(二)
  • ChatGPT热度“狂飙”,OceanBase也去找它唠了唠
  • HTTP协议基础知识点扫盲;HTTPS协议及密码学基础
  • 【golang/go语言】Go语言之反射
  • Java+Swing+Mysql实现超市管理系统
  • 华为OD机试题,用 Java 解【机器人走迷宫】问题
  • 软件测试基本概念
  • 数学建模介绍
  • 【LVGL】学习笔记--(2)GUI Guider的使用
  • OpenCV-PyQT项目实战(6)项目案例02:滚动条应用
  • 3 决策树及Python实现
  • 小程序和Vue+uniapp+unicloud培训课件
  • C语言--指针进阶2
  • 【步进电机和 Arduino】
  • 【面试一:|和||、和区别】