FreeSql.Provider.SqliteCore如何加密
FreeSql.Provider.SqliteCore
是FreeSql
基于微软提供的最新的Microsoft.Data.Sqlite.Core
驱动的实现。
支持的版本
- .NETStandard2.0+
- net6.0
由于目前处于测试阶段,可使用myget源安装FreeSql.Provider.SqliteCore
包。
dotnet add package FreeSql.Provider.SqliteCore --source https://www.myget.org/F/ncc/api/v3/index.json --prerelease
不支持加密
0.安装包。
dotnet add package SQLitePCLRaw.bundle_e_sqlite3
dotnet add package FreeSql.Provider.SqliteCore
直接正常使用其他包一样使用FreeSql即可。SQLitePCLRaw.bundle_e_sqlite3
包不支持加密,但此种方式是官方实现的SQlite
版本
捆绑 | 描述 |
---|---|
SQLitePCLRaw.bundle_e_sqlite3 | 在所有平台上提供一致版本的 SQLite 。 包括 FTS4、FTS5、JSON1 和 R* 树扩展。 建议使用 |
SQLitePCLRaw.bundle_e_sqlcipher | 提供 SQLCipher 的非官方开放源代码内部版本。 |
FreeSql.Provider.SqliteCore如何加密
那我们不安装 SQLitePCLRaw.bundle_e_sqlite3
包,换SQLitePCLRaw.bundle_e_sqlcipher
只有sqlcipher才支持加密。
0.选择一个目录,创建一个控制台项目OvOv.FreeSqlMicrosoftSqliteCore
dotnet new console -n OvOv.FreeSqlMicrosoftSqliteCore
cd OvOv.FreeSqlMicrosoftSqliteCore
1.安装包
dotnet add package SQLitePCLRaw.bundle_e_sqlcipher
dotnet add package FreeSql.Provider.SqliteCore --source https://www.myget.org/F/ncc/api/v3/index.json --prerelease
- 连接串直接指定Password=xxx即可
创建一个类g.cs
,可直接通过g.sqlite
访问到IFreeSql
对象
public class g
{
static Lazy<IFreeSql> sqliteLazy = new Lazy<IFreeSql>(() =>
{
var fsql = new FreeSql.FreeSqlBuilder()
.UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=local.db;Password=123qwe")
.UseAutoSyncStructure(true)
.UseLazyLoading(true)
.UseMonitorCommand(
cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText)
)
.Build();
return fsql;
}
);
public static IFreeSql sqlite => sqliteLazy.Value;
}
测试加密,增加一些数据。Program.cs
中测试
Test();
static void Test()
{
IInsert<Topic> insert = g.sqlite.Insert<Topic>();
var items = new List<Topic>();
for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newTitle{a}", Clicks = a * 100 });
var affrows = insert.AppendData(items).ExecuteAffrows();
Console.WriteLine("affrows:" + affrows);
var list = g.sqlite.Select<Topic>().ToList();
Console.WriteLine("count:" + list.Count);
}
[Table(Name = "tb_topic_insert")]
class Topic
{
[Column(IsIdentity = true, IsPrimary = true)]
public int Id { get; set; }
public int Clicks { get; set; }
public string Title { get; set; }
public DateTime CreateTime { get; set; }
}
运行项目
dotnet run
验证是否登录是否加密?
重新运行时,删除 连接串中的Password,发现无法获取数据。或使用Navicat Premium
工具发现无法连接。
+ .UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=local.db;")
- .UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=|DataDirectory|local.db;Password=123qwe")
提示如下内容,但使用密码时又能正常访问数据。
SqliteException: SQLite Error 26: 'file is not a database'.
相比包 FreeSql.Provider.Sqlite
来说,目前存在一些限制,
|DataDirectory| 默认不支持
需要使用前,指定具体的文件夹,此处相当于指定了当前dll
所在目录,即bin/Debug/net6.0
。参考
string dataSubDirectory = Path.Combine(AppContext.BaseDirectory);
if (!Directory.Exists(dataSubDirectory))
Directory.CreateDirectory(dataSubDirectory);
AppDomain.CurrentDomain.SetData("DataDirectory", dataSubDirectory);
即
public class g
{
static Lazy<IFreeSql> sqliteLazy = new Lazy<IFreeSql>(() =>
{
string dataSubDirectory = Path.Combine(AppContext.BaseDirectory);
if (!Directory.Exists(dataSubDirectory))
Directory.CreateDirectory(dataSubDirectory);
AppDomain.CurrentDomain.SetData("DataDirectory", dataSubDirectory);
var fsql = new FreeSql.FreeSqlBuilder()
.UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=|DataDirectory|local.db;Password=123qwe")
.UseAutoSyncStructure(true)
.UseLazyLoading(true)
.UseMonitorCommand(
cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText)
)
.Build();
return fsql;
}
);
public static IFreeSql sqlite => sqliteLazy.Value;
}
具体的链接串,请参考 https://docs.microsoft.com/zh-cn/dotnet/standard/data/sqlite/connection-strings
如下数学函数不支持
- Floor
- Ceiling
- Log10
- Pow
- Sqrt
- Cos
TimeSpanTest 测试 类中 不通过、ulong最大值,最小值,超出范围。
- 不支持
public void Days()
{
var data = new List<object>();
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Days == 0).ToList());
}
- 不支持
public void Minutes()
{
var data = new List<object>();
data.Add(select.Where(a => a.CreateTime.TimeOfDay.Minutes > 0).ToList());
}
完整代码
FreeSql.Provider.SqliteCore如何加密的更多相关文章
- com.sun.crypto.provider.SunJCE
Could not instantiate bean class [com.lz.monitor.alert.service.ServiceImp]: Constructor threw except ...
- JAVA 非对称加密工具
import java.io.File; import java.io.FileInputStream; import java.math.BigInteger; import java.securi ...
- [开源] FreeSql.Tools Razor 生成器
FreeSql 经过半年的开发和坚持维护,在 0.6.x 版本中完成了几大重要事件: 1.按小包拆分,每个数据库实现为单独 dll: 2.实现 .net framework 4.5 支持: 3.同时支 ...
- [开源] FreeSql.AdminLTE 功能升级
前言 FreeSql 发布至今已经有9个月,功能渐渐完善,自身的生态也逐步形成,早在几个月前写过一篇文章<ORM 开发环境之利器:MVC 中间件 FreeSql.AdminLTE>,您可以 ...
- FreeSql (一)入门
FreeSql 是一个功能强大的对象关系映射程序(O/RM),支持 .NETCore 2.1+ 或 .NETFramework 4.5+(QQ群:4336577) FreeSql采用MIT开源协议托管 ...
- FreeSql v0.11 几个实用功能说明
FreeSql 开源发布快一年了,立志成为 .Net 平台方便好用的 ORM,仓库地址:https://github.com/2881099/FreeSql 随着不断的迭代更新,越来越稳定,也越来越强 ...
- [开源] FreeSql 配套工具,基于 Razor 模板实现最高兼容的生成器
FreeSql 经过半年的开发和坚持维护,在 0.6.x 版本中完成了几大重要事件: 1.按小包拆分,每个数据库实现为单独 dll: 2.实现 .net framework 4.5 支持: 3.同时支 ...
- [开源] FreeSql.AdminLTE.Tools 根据实体类生成后台管理代码
前言 FreeSql 发布至今已经有9个月,功能渐渐完善,自身的生态也逐步形成,早在几个月前写过一篇文章<ORM 开发环境之利器:MVC 中间件 FreeSql.AdminLTE>,您可以 ...
- 加密与解密 Sytem.Security.CryptoGraphy
一.Hash加密,使用HashAlgorithm哈希算法类的派生类 HashAlgorithm派生类包括: KeyedHashAlgorithm: 显示所有加密哈希算法实现均必须从中派生的抽象类. M ...
随机推荐
- Hadoop运行jar包报错java.lang.Exception: java.lang.ArrayIndexOutOfBoundsException: 1
错误信息: java.lang.Exception: java.lang.ArrayIndexOutOfBoundsException: 1 at org.apache.hadoop.mapre ...
- 日常Javaweb 2021/11/19
Javaweb Dao层: //连接数据库,实现增查功能 package dao; import java.sql.Connection; import java.sql.DriverManager; ...
- 位运算符在JS中的妙用
正文 位运算 JavaScript 中最臭名昭著的 Bug 就是 0.1 + 0.2 !== 0.3,因为精度的问题,导致所有的浮点运算都是不安全的,具体原因可详见<0.1 + 0.2不等于0. ...
- CSS基础语法(一)
目录 CSS基础语法(一) 一.CSS简介 1.CSS语法规范 2.CSS代码风格 二.CSS基础选择器 1.标签选择器 2.类选择器 3.id选择器 4.通配符选择器 5.总结 三.CSS字体属性 ...
- 内存管理——new delete expression
C++申请释放内存的方法与详情表 调用情况 1.new expression new表达式在申请内存过程中都发生了什么? 编译器将new这个分解为下面的主要3步代码,①首先调用operator new ...
- android studio 使用 aidl(二)异步回调
基础使用请移步 android studio 使用 aidl (一) 首先建立在server端建立两个aidl文件 ITaskCallback.aidl 用于存放要回调client端的方法 // IT ...
- java面试--(生成随机数,获取重复次数最多,并且数是最大的一个,打印出来)
import java.util.*; public class MaxRandom { public static void main(String[] args){ int[] num = new ...
- ssm-book 整合案例
一:环境及要求 环境: IDEA最新版 MySQL 5.7.19 Tomcat 9 Maven 3.6 要求: 需要掌握 MyBatis:Spring:SpringMVC:MySQL数据库 ...
- vm16虚拟机安装win11
vm16虚拟机安装win11 参考https://baijiahao.baidu.com/s?id=1712702900207158969&wfr=spider&for=pc win1 ...
- [BUUCTF]REVERSE——[FlareOn6]Overlong
[FlareOn6]Overlong 附件 步骤: 例行检查,32位程序,不懂是个啥 32位ida载入,main函数很简单 处理函数 sub_401000 程序只对unk_402008的28位进行了处 ...