SQLite Encryption(加密)新姿势
什么是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(加密)新姿势的更多相关文章
- SQLite XXTea加密学习
这几天优化数据库读写,移植了xxtea加密到最新的数据库sqlite 3.12.2里,一些好文章放在这里.移植后,数据库读写性能异常优秀! 这几天又发现,数据库还是发生了无法写入情况,数据库崩溃掉了. ...
- Android Sqlite数据库加密
Android使用的是开源的SQLite数据库,数据库本身没有加密,加密思路通常有两个: 1. 对几个关键的字段使用加密算法,再存入数据库 2. 对整个数据库进行加密 SQLite数据库加密工具: 收 ...
- 【转+自己研究】新姿势之Docker Remote API未授权访问漏洞分析和利用
0x00 概述 最近提交了一些关于 docker remote api 未授权访问导致代码泄露.获取服务器root权限的漏洞,造成的影响都比较严重,比如 新姿势之获取果壳全站代码和多台机器root权限 ...
- FJNU 1159 Fat Brother’s new way(胖哥的新姿势)
FJNU 1159 Fat Brother’s new way(胖哥的新姿势) Time Limit: 1000MS Memory Limit: 257792K [Description] [题目 ...
- Broadcom BCM94352z/DW1560驱动新姿势
转自:https://blog.daliansky.net/Broadcom-BCM94352z-DW1560-drive-new-posture.html Broadcom WiFi/BlueToo ...
- vue组件通信新姿势
在vue项目实际开发中我们经常会使用props和emit来进行子父组件的传值通信,父组件向子组件传递数据是通过prop传递的, 子组件传递数据给父组件是通过$emit触发事件来做到的.例如: Vue. ...
- JSON CSRF新姿势
以前做渗透测试,遇到过很多次POST数据为JSON数据的CSRF,一直没有搞定,最近发现一个新姿势, 本文作者:Mannix@安全文库 微信公众号:安全文库 测试的时候,当应用程序验证了Cont ...
- c# sqlite 数据库加密
c# sqlite 数据库加密 2010-05-29 10:55 用了ADO.NET 2.0 SQLite Data Provider这样可以直接利用它来创建一个加密的sqlite数据库.有关c#代码 ...
- bzoj1656: [Usaco2006 Jan] The Grove 树木 (bfs+新姿势)
题目大意:一个n*m的图中,“.”可走,“X”不可走,“*”为起点,问从起点开始绕所有X一圈回到起点最少需要走多少步. 一开始看到这题,自己脑洞了下怎么写,应该是可过,然后跑去看了题解,又学会了一 ...
随机推荐
- shell中 -eq,-ne,-gt,-lt,-ge,-le数字比较符
使用说明: -eq //equals等于 -ne //no equals不等于 -gt //greater than 大于 -lt //less than小于 -ge ...
- 2020 Kali Linux Zenmap 安装(可视化界面)
跟着教程学Kali Linux,我安装的2020版的,发现Zemap没被预装. 1.下载 zenmap https://nmap.org/download.html 2.rpm转deb 2020 Ka ...
- Mysql数据库-多实例主从复制-主从故障详解
一.mysql结构 1.实例 1.什么是单实例 一个进程 + 多个线程 + 一个预分配的内存空间 2.多实例 多个进程 + 多个线程 + 多个预分配的内存空间 ](http://shelldon.51 ...
- IT菜鸟之思科模拟实验(PT)
思科官方的模拟软件:cisco packet tracer 网卡端口类型: Ethernet(以太网) 十兆 FastEthernet 百兆 GigabitEthernet 千兆 交换机的端口默认都是 ...
- linux中级之HAProxy基础配置
一.haproxy简介 HAProxy是一款提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,HAProxy是完全免费的.借助HAProxy可以快速并且可靠的提供基于T ...
- Boostrap bootstrap-table插件使用教程
bootstrap table 简介及特性 简介 Bootstrap table 是国人开发的一款基于 Bootstrap 的 jQuery 表格插件,通过简单的设置,就可以拥有强大的单选.多选.排序 ...
- 开源月刊《HelloGitHub》第 62 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这里有实战项目.入门教程.黑科技.开源书籍.大厂开源项目等,涵盖多种编程语言 Pyt ...
- MMF的初步介绍:一个规范化的视觉-语言多模态任务框架
在VQA, Image Caption等任务中,构建模型是一件工作量较大的工作.有没有什么能减少这些重复的工作量呢?与此同时,Pytorch,tensorflow等开源的深度学习工具包发布,大大减少了 ...
- nginx基础概念
nginx基础概念(100%) connection¶ 在nginx中connection就是对tcp连接的封装,其中包括连接的socket,读事件,写事件.利用nginx封装的connection, ...
- noip模拟4[随·单·题·大佬]
woc woc woc难斩了人都傻了 害上来先看T1,发现这不就是一个小期望嘛(有啥的)真是!!打算半个小时秒掉 可是吧,读着读着题面,发现这题面有大问题,后来去找老师,还是我nb给题挑错, ...