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一圈回到起点最少需要走多少步. 一开始看到这题,自己脑洞了下怎么写,应该是可过,然后跑去看了题解,又学会了一 ...
随机推荐
- S8 Linux磁盘与文件系统管理命令
8.1 fdisk:磁盘分区工具 8.2-3 partprobe.tune2fs 8.4 parted:磁盘分区工具 8.5-7 mkfs.dumpe2fs.resize2fs 8.8-9 fsck. ...
- 一次线上事故,让我对MySql的时间戳存char(10)还是int(10)有了全新的认识
美好的周五 周五的早晨,一切都是那么美好. 然鹅,10点多的时候,运营小哥哥突然告诉我后台打不开了,我怀着一颗"有什么大不了的,估计又是(S)(B)不会连wifi"的心情,自信的打 ...
- 20192113 2020-2021-2 《Python程序设计》实验三报告
20192113 2020-2021-2 <Python程序设计>实验三报告 课程:<Python程序设计> 班级: 1921 姓名: 衣丽莎 学号:20192113 实验教师 ...
- 缩放 transform
转换属性 transform 转换是css3中的一个特征,可以实现元素的缩放,位移,变形. 作用: 使元素在位置或者形状上发生一定的改变. 属性: transform 属性值: scale:缩放(一般 ...
- Navicat注册机报错No all pattern found! file already patched
第一步:先把注册机放入安装目录. (这一步非常关键,先不要打开桌面上安装好的快捷方式!!) 第二步:如果之前下载过,把注册表清理干净 计算机\HKEY_CURRENT_USER\SOFTWARE\Pr ...
- SpringMVC=>解决JSON乱码问题
<!-- 解决JSON乱码问题 --> <mvc:annotation-driven> <mvc:message-converters register-defaults ...
- 'utf-8' codec can't decode byte 0xd5 in position XXX: invalid continuation byte问题
找了一下午,各种资料搜集,愣是没搜出来答案. 结果今天早上,做一个小小的改变,就整出来了... 步骤如下: 1.打开excel,全选数据 2.新建记事本,粘贴,选择脚本,更改字体: 3.新建Excel ...
- Java处理Excel中的日期格式
Java处理Excel中的日期格式 2011-12-23 17:34:03| 分类: java |举报 |字号 订阅 下载LOFTER 我的照片书 | 在Excel中的日期格式,其数值为距离1 ...
- CVPR2020无人驾驶论文摘要
CVPR2020无人驾驶论文摘要 无人 导读/ Starsky是一种比较独特的方案.它是在高速上自动驾驶,第一公里最后一公里采用远程驾驶的模式,Starsky的卡车可以由人类远程操作.没有使用较为昂贵 ...
- YOLO3升级优化版!Poly-YOLO:支持实例分割!
YOLO3升级优化版!Poly-YOLO:支持实例分割! POLY-YOLO: HIGHER SPEED, MORE PRECISE DETECTION AND INSTANCE SEGMENTATI ...