2021-07-09

SQLite Encryption(加密)新姿势

SQLite 加密收费了··你知道吗?

什么是SQLite?

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

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

System.Data.SQLite库

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

首先,使用VS2019创建.名字为 TestSqlite的.Net famework 4.6.1的控制台项目。

通过nuget安装
![(https://img-blog.csdnimg.cn/20210703172632243.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E5MTM3NzcwMzE=,size_16,color_FFFFFF,t_70)

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

Stub.System.Data.SQLite.Core.NetFramework

这个库没有依赖项···这里推荐···
在这里插入图片描述

通过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
在这里插入图片描述
在bin文件夹下也生成了sqlite数据库
在这里插入图片描述

加密失败

作为一个数据库,没有密码是不行的。
于是我们在连接字符串加上password
在这里插入图片描述
运行,报错

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开源版本是加密收费的···购买需要2000$·····
在这里插入图片描述

贫穷让我另谋出路

曲线救国 :Microsoft.Data.Sqlite

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

首先,使用VS2019创建.名字为 TestSqlite的.Net famework 4.6.1的控制台项目。

通过NuGet安装 Microsoft.Data.Sqlite.Core和 SQLitePCLRaw.bundle_e_sqlcipher
在这里插入图片描述
在这里插入图片描述

通过程序包管理器安装

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

运行后成功!
:http://lady.shaoqun.com/a/410935.html
独立站高昂流量成废品,如何操作才能起死回生?(上):https://www.ikjzd.com/articles/146487

No comments:

Post a Comment