点击上方蓝字关注我们

.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

可点击原文查看

Nacos配置中心+ASP.NET Core

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

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

点个在看你最好看

.NET+Sqlite如何支持加密相关推荐

  1. android sqlite解密,SQlite数据库的加密与解密

    一 关于SQlite Android系统自带的SQlite是明文存储,不支持加密 二 SQlite加密方式 内容加密 主要写入读取数据时候做加密与解密的动作 缺点: 表结构暴露 无法直接搜索 数据库文 ...

  2. android sqlite数据库加密,(转)SQLite数据库的加密

    1.创建空的SQLite数据库. //数据库名的后缀你可以直接指定,甚至没有后缀都可以 //方法一:创建一个空sqlite数据库,用IO的方式 FileStream fs = File.Create( ...

  3. 给JFinal添加 Sqlite 数据库支持

    2019独角兽企业重金招聘Python工程师标准>>> Sqlite 的单文件便携性.高性能在开发中方便性无与伦比,即使部署在中小型应用中也胜任有余. 在JFinal中添加对 Sql ...

  4. 12306加密传输_三大运营商发5G消息白皮书:短消息服务升级,支持加密传输

    4月8日,中国电信.中国移动.中国联通联合举行线上发布会,共同发布<5G消息白皮书>.<白皮书>阐述了5G消息的核心理念,明确了相关业务功能及技术需求,提出了对5G消息生态建设 ...

  5. 美国住宅保修公司新增支持加密货币支付,并决定将 BTC 列入资产负债表

    美国住宅保修(American Residential Warranty,ARW)公司新增支持加密货币支付.ARW 首席执行官 Richard Kaufman 表示:"非常兴奋加入到数字风险 ...

  6. 12306加密传输_前沿一键发送“文图音视频” 支持加密传输、图形密码、保护用户隐私……5G消息要来了!...

    点击上方"中国信息安全" 可订阅 从驿寄梅花.鱼传尺素,到网络聊天.视频通话,纵观人类发展史,通信始终不可或缺且不断变迁. 过年群发的祝福语.情侣之间的甜蜜互动.朋友互相分享的心灵 ...

  7. sqlite数据库的加密与解密

    sqlite数据库的加密与解密 单词创建的数据库:WH_Lexicon.db 利用sqlcipher对数据库进行加密:sqlcipher工具地址 下载之后,编译 $ ./configure --ena ...

  8. Hyper-V支持加密狗的方法

    熟悉hyper-V的IT人员都知道,Hyper-V Server无法支持加密狗及USB外设,虽然重定向可以解决一部分问题,但对于有些环境下重定向并不适合.例如,某公司安装了某种服务器软件,该软件使用U ...

  9. 日本电商巨头乐天将更新其支付应用程序以支持加密货币

    点击上方 "蓝色字" 可关注我们! 暴走时评: 根据日本电商业巨头乐天最近公布的2018年盈利报告,该公司将于3月18日发布其移动应用程序Rakuten Pay的重要更新.新版本将 ...

最新文章

  1. oracle12c不能进入到http://localhost:1158/em的解决办法
  2. request如何setParamter
  3. 我在外包公司做增删改查有前途么?
  4. LeetCode 1980. 找出不同的二进制字符串
  5. 如何在python中打开文件_Python文件处理:创建、打开、追加、读、写
  6. java算法的递归问题设计_java算法-递归算法思想
  7. 杭州电子科技大学计算机专硕表数二,杭州电子科技大学 计算机学院 2016级计算机技术(专硕)培养方案...
  8. 孪生网络图像相似度_孪生网络:使用双头神经网络进行元学习
  9. springboot2源码1-SpringApplication实例化
  10. 计算机组成原理试题以及答案
  11. ERROR: librtmp not found 解决方案
  12. 一文了解机器人伺服系统
  13. mac关闭虚拟内存_为什么不应该关闭Mac上的虚拟内存
  14. 导出计算机应用的组策略,组策略应用
  15. 对话《JavaScript高级程序设计》作者 Nicholas C. Zakas
  16. 七夕表白攻略:程序员的代码情书
  17. 20世纪中文电影一百强
  18. 东华OJ基础85——手机短号
  19. java 拨打电话_快速拨打电话号码
  20. oracle数据库频繁被锁,Oracle数据库账号频繁被锁定的原因排查

热门文章

  1. hdu4750Count The Pairs(最小生成树找瓶颈边)
  2. 轻松学PHP编程 源代码
  3. backgroundworder 简单使用
  4. mac下npm/node的安装和卸载、升级;node、npm升级后最后删掉node_modules重新安装
  5. 解决Ubuntu 16.04下提示boot分区空间不足的办法
  6. Java中如何利用gson解析数据
  7. unity的依赖注入
  8. Unity3D4.* NGUI制作动态字库
  9. 进程handle获取线程_获取进程中的线程列表
  10. pkpm板按弹性计算还是塑性_双向板按弹性方法还是按塑性方法计算