什么是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安装

这个库依赖了很多如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();
} } }
}

运行后成功!



这里有个需要注意的点:

在设置密码创建数据库后,需要使用ORM执行sql创建表,如果是空数据库,是未加密的··可以直接打开。原因暂未可知。希望知道的大佬能告知

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

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

没有Navicat的童鞋点这里下载安装

替换sqlite3.dll

步骤如下:

打开Bin文件夹下的runtimes



根据自己系统选择文件夹x64还是x86

复制win-x64\native 下的e_sqlcipher.dll



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

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

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

设置密码

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



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

SQLite Encryption(加密)新姿势的更多相关文章

  1. SQLite XXTea加密学习

    这几天优化数据库读写,移植了xxtea加密到最新的数据库sqlite 3.12.2里,一些好文章放在这里.移植后,数据库读写性能异常优秀! 这几天又发现,数据库还是发生了无法写入情况,数据库崩溃掉了. ...

  2. Android Sqlite数据库加密

    Android使用的是开源的SQLite数据库,数据库本身没有加密,加密思路通常有两个: 1. 对几个关键的字段使用加密算法,再存入数据库 2. 对整个数据库进行加密 SQLite数据库加密工具: 收 ...

  3. 【转+自己研究】新姿势之Docker Remote API未授权访问漏洞分析和利用

    0x00 概述 最近提交了一些关于 docker remote api 未授权访问导致代码泄露.获取服务器root权限的漏洞,造成的影响都比较严重,比如 新姿势之获取果壳全站代码和多台机器root权限 ...

  4. FJNU 1159 Fat Brother’s new way(胖哥的新姿势)

    FJNU 1159 Fat Brother’s new way(胖哥的新姿势) Time Limit: 1000MS   Memory Limit: 257792K [Description] [题目 ...

  5. Broadcom BCM94352z/DW1560驱动新姿势

    转自:https://blog.daliansky.net/Broadcom-BCM94352z-DW1560-drive-new-posture.html Broadcom WiFi/BlueToo ...

  6. vue组件通信新姿势

    在vue项目实际开发中我们经常会使用props和emit来进行子父组件的传值通信,父组件向子组件传递数据是通过prop传递的, 子组件传递数据给父组件是通过$emit触发事件来做到的.例如: Vue. ...

  7. JSON CSRF新姿势

    以前做渗透测试,遇到过很多次POST数据为JSON数据的CSRF,一直没有搞定,最近发现一个新姿势, ​​​本文作者:Mannix@安全文库 微信公众号:安全文库 测试的时候,当应用程序验证了Cont ...

  8. c# sqlite 数据库加密

    c# sqlite 数据库加密 2010-05-29 10:55 用了ADO.NET 2.0 SQLite Data Provider这样可以直接利用它来创建一个加密的sqlite数据库.有关c#代码 ...

  9. bzoj1656: [Usaco2006 Jan] The Grove 树木 (bfs+新姿势)

      题目大意:一个n*m的图中,“.”可走,“X”不可走,“*”为起点,问从起点开始绕所有X一圈回到起点最少需要走多少步. 一开始看到这题,自己脑洞了下怎么写,应该是可过,然后跑去看了题解,又学会了一 ...

随机推荐

  1. shell中 -eq,-ne,-gt,-lt,-ge,-le数字比较符

    使用说明:     -eq //equals等于    -ne //no equals不等于    -gt //greater than 大于    -lt //less than小于    -ge ...

  2. 2020 Kali Linux Zenmap 安装(可视化界面)

    跟着教程学Kali Linux,我安装的2020版的,发现Zemap没被预装. 1.下载 zenmap https://nmap.org/download.html 2.rpm转deb 2020 Ka ...

  3. Mysql数据库-多实例主从复制-主从故障详解

    一.mysql结构 1.实例 1.什么是单实例 一个进程 + 多个线程 + 一个预分配的内存空间 2.多实例 多个进程 + 多个线程 + 多个预分配的内存空间 ](http://shelldon.51 ...

  4. IT菜鸟之思科模拟实验(PT)

    思科官方的模拟软件:cisco packet tracer 网卡端口类型: Ethernet(以太网) 十兆 FastEthernet 百兆 GigabitEthernet 千兆 交换机的端口默认都是 ...

  5. linux中级之HAProxy基础配置

    一.haproxy简介 HAProxy是一款提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,HAProxy是完全免费的.借助HAProxy可以快速并且可靠的提供基于T ...

  6. Boostrap bootstrap-table插件使用教程

    bootstrap table 简介及特性 简介 Bootstrap table 是国人开发的一款基于 Bootstrap 的 jQuery 表格插件,通过简单的设置,就可以拥有强大的单选.多选.排序 ...

  7. 开源月刊《HelloGitHub》第 62 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这里有实战项目.入门教程.黑科技.开源书籍.大厂开源项目等,涵盖多种编程语言 Pyt ...

  8. MMF的初步介绍:一个规范化的视觉-语言多模态任务框架

    在VQA, Image Caption等任务中,构建模型是一件工作量较大的工作.有没有什么能减少这些重复的工作量呢?与此同时,Pytorch,tensorflow等开源的深度学习工具包发布,大大减少了 ...

  9. nginx基础概念

    nginx基础概念(100%) connection¶ 在nginx中connection就是对tcp连接的封装,其中包括连接的socket,读事件,写事件.利用nginx封装的connection, ...

  10. noip模拟4[随·单·题·大佬]

    woc    woc   woc难斩了人都傻了 害上来先看T1,发现这不就是一个小期望嘛(有啥的)真是!!打算半个小时秒掉 可是吧,读着读着题面,发现这题面有大问题,后来去找老师,还是我nb给题挑错, ...