您现在的位置是:网站首页>编程语言

NetCore使用Microsoft.Data.Sqlite的一些方法加解密方法

编程语言阿文2023年4月07日1558浏览

简介什么是SQLite?SQLite是一个C语言实现的小型、快速、自包含、高可靠性、功能全面的SQL数据库引擎。起因:刚……

什么是SQLite?

            SQLite是一个C语言实现的小型、快速、自包含、高可靠性、功能全面的SQL数据库引擎。

起因:刚好项目上有个需求,需要使用VS2022+.Net6+sqlite完成数据层。

System.Data.SQLite库

先尝试了官方的​ ​System.Data.SQLite​​ 包。

首先,使用VS2022创建.名字为 TestSqlite的.Net6的控制台项目。

通过nuget安装

1

这个库依赖了很多如linq、EF6等其他库.个人不是很喜欢···有需要的朋友直接安装是可以的.

通过nuget安装后使用如下代码成功运行。

using System;
using System.Data.SQLite;
namespace TestSqlite
{
	internal class Program
    {
		private static void Main(string[] args)
        {
			string cs = "Data Source=TestSqlite.sqlite";//数据库连接字符串
			string stm = "SELECT SQLITE_VERSION()";//查看版本
			var con = new SQLiteConnection(cs);//创建连接
			con.Open();
			var cmd = new SQLiteCommand(stm, con);
			string version = cmd.ExecuteScalar().ToString();//查看版本
			Console.WriteLine($"SQLite version: {version}");
			Console.ReadKey();
        }
    }
}

运行后成功,可以看到版本是3.35.5

2

在bin文件夹下也生成了sqlite数据库

加密数据库失败

作为一个数据库,没有密码是不行的。于是我们在连接字符串加上password

3

运行后,程序报错

System.IO.FileNotFoundException:“未能加载文件或程序集“System.Data.SQLite.SEE.License, Version=1.0.114.0, Culture=neutral, PublicKeyToken=433d9874d0bb98c5”或它的某一个依赖项。系统找不到指定的文件。

这个​​System.Data.SQLite.SEE(SQLite Encryption Extension)​​ 是System.Data.SQLite 的官方 SQLite 加密扩展包。SQlite开源版本是加密收费的,购买需要不少钱,

于是找到微软官方包 Microsoft.Data.Sqlite

经过资料查询,发现微软的​​Microsoft.Data.Sqlite​​ 库支持,所以再次进行尝试。

首先,使用VS2022创建.名字为 TestSqlite的.Net6的控制台项目。

通过NuGet安装 Microsoft.Data.Sqlite.Core和 SQLitePCLRaw.bundle_e_sqlcipher

45

或通过程序包管理器安装

​​Install-Package Microsoft.Data.Sqlite.Core​​

另外我们需要安装加密包

​​Install-Package SQLitePCLRaw.bundle_e_sqlcipher​​·

Dapper.Crud

个人比较喜欢Dapper,不喜欢的小伙伴可以使用自己的ORM,不用安装这个,使用自己喜欢的方式创建表即可。

Install-Package Dapper.Crud

安装完成后使用如下代码

using System;
using System.Data;
using Dapper;
using Microsoft.Data.Sqlite;
namespace TestSqlite
{
	internal class Program
    {
		private static void Main(string[] args)
		{
			var connStr = @"Data Source=TestSqlite.sqlite;";//连接字符串
			var conn = new SqliteConnectionStringBuilder(connStr)
				{
					Mode = SqliteOpenMode.ReadWriteCreate,
					Password = "password"
				}.ToString();//使用这个方式设置密码,避免sql注入
			var connection = new SqliteConnection(conn);//创建SQLite连接
			if (connection.State == ConnectionState.Closed)
			{
				connection.Open();
				var createTableSqlStr = @"CREATE TABLE  if not exists ""Alarm"" ( ""Id"" INTEGER NOT NULL, ""AlarmName"" TEXT, ""AlarmTypeId"" INTEGER, PRIMARY KEY ( ""Id"" ) );";
				var result = connection.Execute(createTableSqlStr);//使用Dapper执行sql语句创建表
				Console.ReadKey();
            }
        }
    }
}

运行后成功!这里有个需要注意的点:在设置密码创建数据库后,需要使用ORM执行sql创建表,如果是空数据库,是未加密的··可以直接打开。原因暂未可知

我们使用Navicat for SQLite 打开,如果出现以下弹窗,就说明加密成功了!

6

使用Navicat for SQLite 打开加密数据库

替换sqlite3.dll

步骤如下:

1.打开Bin文件夹下的runtimes

7

根据自己系统选择文件夹x64还是x86,复制win-x64\native 下的e_sqlcipher.dll

打开Navicat 的安装目录,将刚刚复制的e_sqlcipher.dll复制到该目录下。

备份sqlite3.dll(将该dll复制到其他文件夹下),

然后将复制的e_sqlcipher.dll改名成 sqlite3.dll 替换掉原来的sqlite3.dll

设置密码

在数据库连接右键编辑连接–>高级–>设置数据库文件位置–>勾选已加密–>设置密码–>勾选保存密码

8

双击连接数据库,连接成功!!

9


标签: .net C# netcore

2

上一篇: 消息队列的使用场景大概是怎样的?

下一篇: 么有了

评论文明上网,理性发言0条评论