.NET+Sqlite如何支持加密

a26d7e4148dccb56e02fd2b6f989d64b.png

点击上方蓝字关注我们

.NET+Sqlite如何支持加密

Sqlite

SQLite 来源于公共领域 SQLite Is Public Domain
确保代码不会受到任何专有或许可内容的污染,没有任何来自互联网上的未知来源复制。即全是原创的。

虽然是免费的,无需许可证,可用于任何目的,但如果你的公司必须要一个许可证,你也能申请授权https://sqlite.org/purchase/license.

但不支持加密。如果想支持登录加密,需要另外的扩展SQLite 加密扩展(SQLite Encryption Extension,),具有读取/写入 AES 加密数据库的附加功能。具体授权可参考 https://www.sqlite.org/prosupport.html

Sqlite加密

一直以来,FreeSql开发群中,总会有一些开发者来询问Sqlite加密的问题,事实上,官方提供的Sqlite加密功能是收费的。当连接串上使用Password时,会提示授权问题。
如果底层依赖于System.Data.SQLite.Core

Could not load file or assembly 'System.Data.SQLite.SEE.License,
Version=1.0.115.5, Culture=neutral, PublicKeyToken=433d9874d0bb98c5,
processorArchitecture=MSIL

如果底层依赖于Microsoft.Data.Sqlite 也会提示

You specified a password in the connection string, but the native SQLite
library 'e_sqlite3' doesn't support encryption.

System.Data.SQLite.Core

创建一个控制台项目,起名 OvOv.SqliteSystemCore

dotnet new console -n OvOv.SqliteSystemCore
cd OvOv.SqliteSystemCore

安装包

dotnet add package System.Data.SQLite.Core

使用SQLiteConnection创建一个连接,使用Password指定密码

using System.Data.SQLite;static void Open()
{string baseConnectionString = "Data Source=local.db";var connectionString = new SQLiteConnectionStringBuilder(baseConnectionString){Password = "123qwe"}.ToString();using SQLiteConnection? connection = new SQLiteConnection(connectionString);connection.Open();
}
Open();

运行项目

dotnet run

就会出现如下错误。

System.IO.FileNotFoundException:“Could not load file or assembly
'System.Data.SQLite.SEE.License, Version=1.0.115.5, Culture=neutral, PublicKeyToken=433d9874d0bb98c5, processorArchitecture=MSIL'.
系统找不到指定的文件。”

Microsoft.Data.Sqlite

创建一个控制台项目,起名 OvOv.SqliteMicrosoft

dotnet new console -n OvOv.SqliteMicrosoft
cd OvOv.SqliteMicrosoft

安装包

dotnet add package Microsoft.Data.Sqlite

使用SqliteConnection创建一个连接,使用Password指定密码

using Microsoft.Data.Sqlite;static void Open()
{string baseConnectionString = "Data Source=local.db";var connectionString = new SqliteConnectionStringBuilder(baseConnectionString){Mode = SqliteOpenMode.ReadWriteCreate,Password = "123qwe"}.ToString();using SqliteConnection? connection = new SqliteConnection(connectionString);connection.Open();
}Open();

运行项目

dotnet run

就会出现如下错误。

Unhandled exception. System.InvalidOperationException: You specified a password in the connection string, 
but the native SQLite library
'e_sqlite3' doesn't support encryption. at Microsoft.Data.Sqlite.SqliteConnection.Open()

其实微软已经提供了加密的方案。

  • https://docs.microsoft.com/zh-cn/dotnet/standard/data/sqlite/encryption?tabs=netcore-cli

dotnet remove package Microsoft.Data.Sqlite
dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.bundle_e_sqlcipher

重新运行项目 ,就会发现,他正常执行。没有任何报错。

有关使用不同的本机库进行加密的详细信息,请参阅自定义 SQLite 版本。

我们从 自定义 SQLite 版本上可以看到。

默认情况下,主 Microsoft.Data.Sqlite 包引入 SQLitePCLRaw.bundle_e_sqlite3。若要使用不同的捆绑,请改为安装 Microsoft.Data.Sqlite.Core 包以及要使用的捆绑包。

SQLitePCLRaw.bundle_e_sqlcipher

提供 SQLCipher 的非官方开放源代码内部版本。此版本支持加密

完整代码

  • https://github.com/luoyunchong/dotnetcore-examples/blob/master/Database-Drivers/OvOv.SqliteMicrosoftCore/Program.cs

可点击原文查看

71f99b848cca0ff5168814fa14a04c6a.png

Nacos配置中心+ASP.NET Core


160edeb573c84a1c7b61db6827558f7b.png

除了Swagger UI,你还能选择 IGeekFan.AspNetCore.RapiDoc


2d42f0b36e3d9cc89ddc6b0728000d14.png

github访问慢,npm 等 半天,dev-sidecar这个工具帮你轻松搞定一切。


b0c681f4f529760c2f67132475265b4b.png

点个在看你最好看

d90e018e456344e7df201657692518ec.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293408.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux之scp命令

svn 删除所有的 .svn文件 find . -name .svn -type d -exec rm -fr {} \; linux之cp/scp命令+scp命令详解 名称:cp 使用权限:所有使用者 使用方式: cp [options] source dest cp [options] source... directory 说明&#xff1a…

裸奔、抽烟、凡尔赛,原来数学家玩得这么野……

全世界只有3.14 % 的人关注了爆炸吧知识六个数学家一部数学史假如宇宙真的由神明设计那他一定是个数学家数学就是他描绘自然的语言数学的重要性已经不用多说但是很多人仍觉得数学是高冷的女神其实数学神奇却并不神秘高贵却并不高冷因为有一群智者早就用他们的智慧和精力将那些晦…

SqlServer和MySQL中存储过程out返回值处理C#代码

1.SqlServer中out处理 C#代码 #region"SqlServer中存储过程处理out返回值"//public void getdata()//{// string str " server192.168.xxxx ;user idxxx;passwordxxxxx#;databasexxxxx_db;min pool size4;max pool size4;packet size3072";// SqlCo…

C#摄像头实现拍照功能的简单代码示例

C#摄像头实现拍照功能的简单代码示例2009-11-20 来自:网上整理字体大小:【大中小】摘要:这里将介绍一个C#摄像头实现拍照功能的简单代码示例,代码虽然不短,但是基本上实现了相对应的功能,希望对大家有所帮…

数据分析在零售业八大应用点总结

1、销售指标分析: 主要分析各项销售指标,例如毛利、毛利率、坪效、交叉比、销进比、盈利能力、周转率、同比、环比等等;而分析维又可从管理架构、类别品牌、日期、时段等角度观察,这些分析维又采用多级钻取,从而获得相…

foreach循环符合就不往下走了_柴油发电机组冷却液循环故障解决方法

点击上方蓝字了解更多精彩柴油发电机组冷却液循环故障是发电机组的常见故障之一!下面给大家介绍一下针对循环故障做出的排查解决。1、柴油发电机组水泵故障。首先我们要先检查水泵作用是否良好,要是发现水泵传动齿轴磨损过限时,说明水泵已失去…

java web移植 遇到Project facet Java version 1.7 is not supported

2019独角兽企业重金招聘Python工程师标准>>> 在移植eclipse项目时,如果遇到 “Project facet Java version 1.7 is not supported.” 项目中的jdk1.7不支持。说明项目是其他版本jdk编译的,在eclipse里运行时会报版本不支持。 解决办法: 法1&a…

c#winform自定义窗体(含源码)

第一步:首先引用DLL再窗体中继承DevComponents.DotNetBar.OfficeFormpublic partial class MainForm : DevComponents.DotNetBar.OfficeForm初始化程序中添加 this.EnableGlass false;public MainForm(){this.EnableGlass false;InitializeComponent();}第二步&a…

linux之tmp文件夹

最近开始学习LINUX,关于/tmp文件夹, 查了些资料,/tmp文件夹是存放linux临时文件的地方,在Linux系统中/tmp文件夹里面的文件会被清空,至于多长时间被清空,如何清空的,可能就不清除了。 在CentOS5…

如何巧妙拒绝老同学借钱?哈哈哈哈哈......

1 别说,还挺像...cr:豆瓣银河系漫游1999▼2 奇奇怪怪的赚钱方式又增加了▼3 教你如何做到边吃边睡...▼4 方法二还挺有道理...▼5 总是在不该清醒的时候清醒▼6 多令人怀念!▼7 对不起,我太菜了▼8 哈哈哈哈哈▼8 数学能有…

协同过滤

在现今的推荐技术和算法中,最被大家广泛认可和采用的就是基于协同过滤的推荐方法。本文将带你深入了解协同过滤的秘密。 1 什么是协同过滤 协同过滤是利用集体智慧的一个典型方法。要理解什么是协同过滤 (Collaborative Filtering, 简称 CF),首先想一个简…

移动平台对 meta 标签的定义

下面介绍一些有关标记的例子及解释。 一、meta 标签分两大部分:HTTP 标题信息(http-equiv)和页面描述信息(name)。 1、http-equiv 属性的 Content-Type 值(显示字符集的设定) 说明:设…

微信改成右滑删除_手机文件数据恢复,怎样恢复已过期的微信附件呢?

手机文件数据恢复,怎样恢复已过期的微信附件呢?我们在恢复手机删除的文件之前,很多人都想知道,为什么自己的文件删除了可以被恢复,既然能被恢复,是我彻底删除不了手机的文件吗?文件真的消失了吗…

linux之cat命令详解

简略版: cat主要有三大功能: 1.一次显示整个文件。$ cat filename 2.从键盘创建一个文件。$ cat > filename 只能创建新文件,不能编辑已有文件. 3.将几个文件合并为一个文件: $cat file1 file2 > file参数: -n 或 --nu…

【.NET 遇上 GraphQL】使用 Hot Chocolate 构建 GraphQL 服务

Hot Chocolate 是 .NET 平台下的一个开源组件库, 您可以使用它创建 GraphQL 服务, 它消除了构建成熟的 GraphQL 服务的复杂性, Hot Chocolate 可以连接任何服务或数据源,并创建一个有凝聚力的服务,为您的消费者提供统一的 API。在本文中, 我会在 .NET 应…

POJ2184 Cow Exhibition(DP:变种01背包)

题意: 一群奶牛分别有s和f两个值,要求选出一些奶牛使s与f的和最大并且s和f分别的和不能为负数。 要点: 用dp[i]j表示当s的和为i时f的和为j,这样最后只要求dp[i]i的最大值即可。注意这题因为有负数,所以引入一个偏移量。…

PHP命令注入***

PHP命令注入***漏洞是PHP应用程序中常见的脚本漏洞之一,国内著名的Web应用程序Discuz!、DedeCMS等都曾经存在过该类型漏洞。本文描述了常见的PHP命令注入***漏洞存在形式和利用方法,结合漏洞实例进行分析和漏洞利用,并针对如何防范PHP命令注入…

Vim文本编辑器 指令大全(二)

经常处理文本以及经常需要写代码的人,都会有自己比较常用的编辑器,本人喜欢用Vim,理由就是Vim编辑器灵活,并且可以达到纯键盘操作,使用纯熟情况下,根本不需要鼠标操作,听起来是不是很酷的&#…

电脑用户名_仁霸下料优化软件如何找回密码、更换绑定电脑?

今天有客户来找我们管件管家,说注册密码忘记了,登陆不上软件问怎么找回;还有个用户因为换了电脑,需要将账号移到新电脑上。此前我们以玻璃软件为例说了如何下载以及在哪里找到下载文件的位置,这期还是以玻璃软件为例讲…