C# 利用SQLite对.DB和.logdb加密和解密和SQLite创建数据库
1.最近研究了下利用SQLite为db文件简单的加密和解密
private static SQLiteConnection GetConnection()
{
SQLiteConnection conn;
string password = dataProvider.ConfigSearch(ConfigCode.SYS_File_ENCRYPTION_PASSWORD, true)[].Value;
string dbFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), ConfigCode.CLIENT_DATA_PATH);
string dbPath = Path.GetDirectoryName(dbFile);
if (!Directory.Exists(dbPath))
{
Directory.CreateDirectory(dbPath);
}
if (!File.Exists(dbFile))
{
//数据库不存在,则创建
SQLiteConnection.CreateFile(dbFile);
CommonUtils.SetAccessControlList(dbFile);
conn = new SQLiteConnection(string.Format("Data Source={0};Pooling=true;FailIfMissing=false", dbFile));
conn.Open();
conn.ChangePassword(password);
if (string.IsNullOrEmpty(install_db_sql))
{
install_db_sql = Path.Combine(Path.GetDirectoryName(typeof(SQLiteProvider).Assembly.Location), "setup.sql");
} foreach (string line in File.ReadAllText(install_db_sql).Split(new char[] { ';' }))
{
if (String.IsNullOrEmpty(line))
{
continue;
}
SQLiteCommand cmd = conn.CreateCommand();
cmd.CommandText = line;
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
cmd.Dispose();
}
}
else
{
try
{
conn = new SQLiteConnection(string.Format("Data Source={0};Pooling=true;FailIfMissing=false", dbFile));
conn.SetPassword(password);
conn.Open();
conn.ChangePassword(password);
}
catch (Exception)
{
conn = new SQLiteConnection(string.Format("Data Source={0};Pooling=true;FailIfMissing=false", dbFile));
conn.Open();
} }
return conn;
}
这里为了兼顾以前没有加密的数据库文件,特意做了处理,如果数据库不存在,直接创建,加密就不存在这个问题,主要是针对已经存在的数据库有个try...catch的异常处理,个人已验证,可以直接拿去用。
C# 利用SQLite对.DB和.logdb加密和解密和SQLite创建数据库的更多相关文章
- SQLite在Android程序中的使用方法,SQLite的增删查改方法
Sqlite: 1.一款用来实现本地数据存储的轻量级数据管理工具,是众多用来实现数据库管理的工具之一. 2.Android已经将SQLite的代码功能吸收在它的系统中,我们可以直接在Android程序 ...
- 探讨.NET Core数据进行3DES加密和解密问题
前言 一直困扰着我关于数据加密这一块,24号晚上用了接近3个小时去完成一项任务,本以为立马能解决,但是为了保证数据的安全性,我们开始去对数据进行加密,然后接下来3个小时专门去研究加密这一块,然而用着用 ...
- 利用SQLite在android上创建数据库
利用SQLite在android上创建数据库 方法: 1.创建我们的数据库类继承SQLiteOpenHelper类 完成相关函数的重写和数据库对象的初始化 public MySQLiteOpenHel ...
- 利用JavaScript函数对字符串进行加密
加密.解密问题对我来说一直是很神秘的,感到神奇无比. 理论了解 前段时间看到关于利用JavaScript函数unescape()和escape()对字符串进行替换处理.通过查资料得知, escape( ...
- (译)利用ASP.NET加密和解密Web.config中连接字符串
介绍 这篇文章我将介绍如何利用ASP.NET来加密和解密Web.config中连接字符串 背景描述 在以前的博客中,我写了许多关于介绍 Asp.net, Gridview, SQL Server, A ...
- 利用ASP.NET加密和解密Web.config中连接字符串
摘自:博客园 介绍 这篇文章我将介绍如何利用ASP.NET来加密和解密Web.config中连接字符串 背景描述 在以前的博客中,我写了许多关于介绍 Asp.net, Gridview, SQL Se ...
- 利用Cython对python代码进行加密
利用Cython对python代码进行加密 Cython是属于PYTHON的超集,他首先会将PYTHON代码转化成C语言代码,然后通过c编译器生成可执行文件.优势:资源丰富,适合快速开发.翻译成C后速 ...
- 利用Java自带的MD5加密java.security.MessageDigest;
MD5加密算法,即"Message-Digest Algorithm 5(信息-摘要算法)",它由MD2.MD3.MD4发展而来的一种单向函数算法(也就是HASH算法),它是国际著 ...
- js读取cookie,并利用encrypt和decrypt加密和解密方法
以下为支持encrypt和decrypt加密和解密方法 eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a ...
随机推荐
- github page
使用github page 可以查看仓库中保存的网页的事例 新建gh-pages的分支,然后点击上方的page按钮即可配置相应的链接以及地址 注:默认情况下显示的是当前文件下的index.html文件 ...
- Python for Informatics 第11章 正则表达式四(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 11.3 组合查询和抽取 如果我 ...
- 二、jquery选择器
在jquery库中,可以通过选择器实现DOM元素快捷选择这一重要的核心功能. 1.选择器的优势 (1)代码更简单 由于在jquery库中,封装了大量可以通过选择器直接调用的方法或函数,使编写代码更加简 ...
- HTML基础篇之图像热区补充一下图片相对地址的定义
HTML5课堂笔记理解2 上次说到图片相对地址的定义,举例了4中情形的下的不同目录的图片书写方法补充一个如果你要的图片目录跟上面四种都不一样话可以用以下属性值尝试 ./ 当前目录 ...
- sun公司的jstl标签库
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- Android学习笔记之 android:collapseColumns ,android:shrinkColumns 和stretchColumns
摘自:http://blog.csdn.net/sjf0115/article/details/7213565/ TableLayout是一个使用复杂的布局,最简单的用法就仅仅是拖拉控件做出个界面,但 ...
- C语言2
今天总结数组和数据类型,数组就是按一定顺序排列,具有某种相同性质的同类型变量的集合,这些变量具有相同的名字和数据类型(int char long 等),在内存中顺序排列,并通过下标区分(下标从0开始 ...
- Spring boot 学习记录
java的三种配置方式 基于xml的配置 基于注解的配置 基于java的配置 Spring boot推荐的配置方式:java配置+注解配置 一.注解 SpringBootApplication :等价 ...
- 一起来做chrome扩展《本地存储localStorage》
chrome中的本地存储其实也是用的HTML5中localStorage,唯一区别是chrome扩展有自己的localStorage,它属于这个扩展,而不属于一个域名.得用这一点可以很好的处理扩展自己 ...
- event事件对象
事件对象event: 在触发DOM事件的时候都会产生一个对象 1.type:获取事件类型 2.target:获取事件目标 3.stopPropagation():组织事件冒泡 4.preventDef ...