.net core加载加密的sqlite文件失败解决方案

.net core加载加密的sqlite文件失败解决方案

??在项目开发过程中,遇到使用sqlite的场景。在加载加密的sqlite时,连接sqlite时报错,,先用百度查询了下资料,尚未找到对应解决方法,故接着在stackoverflow上查找,找到了解决思路,并已解决问题。

1.开发时所用到的相关内容

1.1相关项目组件

组件名称 版本
Microsoft.NETCore.App 2.1.0
sqlSugarCore 5.0.0.9

1.2 sqlite加密软件

软件名称 版本
SQLiteStudio 3.1.1

2.解决过程

2.1 遇错过程

??刚开始用的时候是直接用SQLiteStudio直接创建了SQLCipher加密的sqlite文件,用sqlsugar进行DB连接时候程序报错。报错提示如下:

file is encrypted or is not a database

2.2 第一种解决方案——System.Data.Sqlite

2.2.1 使用System.Data.Sqlite

??在sqlite连接的时候,弃用sqlsugar,转而采用System.Data.Sqlite中的sqliteconnection来连接,这个需要自行从nuget中下载,当前采用是System.Data.Sqlite的最新版本1.0.112,且需要将原先加密方式进行改变,不然仍会报上述的错误提示,数据类型要改为System.Data.SQLite,输入文件名,密码后重新创建DB文件。

2.2.2 相关Demo代码

??测试的SQLCipher.db3中已存有user表,表中仅有一个varchar(32)的Name字段,数据仅有一条为sqlcipher。以下是测试相关代码

using System;
using System.Data;
using System.Data.SQLite;

SQLiteConnection clinet = new SQLiteConnection($"Data Source={path3}");

string key = "123456";

clinet.Open();

SQLiteCommand command = clinet.CreateCommand();

command.CommandText = "PRAGMA key = " + key;

command.ExecuteNonQuery();

command.CommandText = "select name from user";

DataTable dt = new DataTable();

SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);

adapter.Fill(dt);

var result = dt.Rows[0][0];

clinet.Close();

??运行完毕后,未报错且成功取到结果。

2.3第二种解决方法—Microsoft.Data.Sqlite

??第一种方法实现后,再查找是否有更好的办法来解决。sqlsugar采用的sqlite连接是用的Microsoft.Data.Sqlite中的连接方式,在使用Microsoft.Data.Sqlite连接加密方法时,目前仅找到对应的连接数据类型为SQLCipher加密的文件的方法

2.3.1引用的包

??第一个是引用nuget中的SQLitePCLRaw.bundle_sqlcipher包,我引用的是SQLitePCLRaw.bundle_sqlcipher包的最新版本1.1.14,第二个是Microsoft.Data.Sqlite包,因为sqlsugar中自带了,故就没有再次引用,没有的情况下需要引用Microsoft.Data.Sqlite。

2.3.2 相关Demo代码

??测试的SQLCipher.db3中已存有user表,表中仅有一个varchar(32)的Name字段,数据仅有一条为sqlcipher。以下是测试相关代码

using System;
using System.Data;
using Microsoft.Data.Sqlite;

string [email protected]"C:\Users\Administrator\Desktop\SQLCipher.db3";

string key="123456";//密码

SqliteConnection client=new SqliteConnection($"Data Source={path}");

client.Open();

SqliteCommand command = client.CreateCommand();

command.CommandText = "PRAGMA key = " + key;

command.ExecuteNonQuery();

command.CommandText = "select name from user";

DataTable dt = new DataTable();

SqliteDataAdapter adapter = new SqliteDataAdapter(command);

adapter.Fill(dt);

var result = dt.Rows[0][0];

client.Close();

??运行完毕后,未报错且成功取到结果。

2.4在sqlsugar中使用

??需要注意的地方是要在数据库开启的时候,先指定密码,再执行SQL语句,两者在同一个开启连接的DB连接中操作。

2.4.1相关Demo代码

??测试的SQLCipher.db3同上,以下是测试相关代码。

using System;
using SqlSugar;

string [email protected]"C:\Users\Administrator\Desktop\SQLCipher.db3";

string key="123456";//密码

ConnectionConfig config = new ConnectionConfig()
{
    DbType = SqlSugar.DbType.Sqlite,
    ConnectionString = $"Data Source={path}",
    IsAutoCloseConnection = false
};

SqlSugarClient client = new SqlSugarClient(config);

client.Open();

client.Ado.ExecuteCommand($"PRAGMA key ={key}}");

var data = client.Queryable<User>().ToList();

client.Close();

??运行完毕后,未报错且结果在data变量中。

原文地址:https://www.cnblogs.com/JustToDoIt/p/12443966.html

时间: 2024-08-04 08:11:38

.net core加载加密的sqlite文件失败解决方案的相关文章

php ci框架中加载css和js文件失败的原因及解决方法

在将html页面整合到ci框架里面的时候,加载css和js失败.原因是ci框架是入口的框架 对框架中文件的所有请求都需要经过index.php处理完成,当加载外部的css和js文件的时候要使 用base_url()函数处理外部的链接. 在控制器中需要先载入url相关的类 public function test() { $this->load->helper('url'); $this->load->view('admin/test'); } 在test.php的view视图中.

Maven工程webinfo下面的JSP页面无法加载.js、.css文件的解决方案

--下面是我的工程路径 --我jsp的写法 -----启动工程,访问js文件的路径是这样的, href="http://localhost:8080/activiti/css/public.css" 怎么看都没毛病.但是提示404找不到. 所以判断是因为访问被拦截住了.最后分析查找得知,是因为在web.xml缺少了SpringMVC拦截设置. -----下面这段代码来源于其他博客转载 通过在web.xml中添加如下设置后,问题的得以解决: 注意: 下面这段代码,要写在引入springM

Spring加载加密的配置文件

一.继承并实现自己的属性文件配置器类 /** * 带加密的Spring属性配置文件扩展类 * 加密方式:AES * @author simon * */ public class EncryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer { //指定需要加密的属性 private String[] propertyNames = {"db.password"}; /** * 解密指定proper

java如何加载本地的dll文件

首先,应当明确,dll有两类:(1)Java所依赖的dll和,(2)dll所依赖的dll.正是由于第(2)种dll的存在,才导致了java中加载dll的复杂性大大增加,许多说法都是这样的,但我实验的结果却表明似乎没有那么复杂,后面会予以详细阐述. 其次,Java中加载dll的方式也有两种:(1)通过调用System.loadLibrary(String filename)和,(2)通过调用System.load(String filename)方法.其底层都是通过使用ClassLoader中的l

JQuery 加载 CSS、JS 文件的方法有哪些?

在进行web前端开发(http://www.maiziedu.com/course/web-px/)时,我们可能会需要使用JQuery加载一个外部的css文件或者js文件,加载外部文件的方法有多种,下面具体看看各种加载方法 JS 方式加载 CSS.JS 文件: //加载 css 文件function includeCss(filename) { var head = document.getElementsByTagName('head')[0]; var link = document.cre

一个link加载多个css文件

细看正则时匹配慕课网链接时发现的,一个link加载多个css文件 http://static.mukewang.com/static/css/??base.css,common/common-less.css?t=2.5,u/u_common-less.css,u/plans-less.css,u/dynamic/home-less.css?v=201708111926 淘宝也有这样的链接 http://a.tbcdn.cn/p/fp/2011a/??html5-reset-min.css,gl

js便签笔记(8)——js加载XML字符串或文件

1. 加载XML文件 方法1:ajax方式.代码如下: var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); xhr.open("GET", "data.xml", false); xhr.send(null); var xmlDoc = xhr.responseXML; console.log(xmlDoc

spring配置加载多个properties文件

(一)首先,我们要先在spring配置文件中.定义一个专门读取properties文件的类.例: 1 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 2 <property name="locations"> 3 <list> 4 <v

使用getScript()方法异步加载并执行js文件

使用getScript()方法异步加载并执行js文件 使用getScript()方法异步请求并执行服务器中的JavaScript格式的文件,它的调用格式如下所示: jQuery.getScript(url,[callback])或$.getScript(url,[callback]) 参数url为服务器请求地址,可选项callback参数为请求成功后执行的回调函数. 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E