当前位置:首页 >资讯 >SQLite嵌入式数据库如何加密


SQLite作为一个开源嵌入式武器数据库,具有系统成本低、检索效率高的特点。但由于空间限制和性能要求,需要更简单的加密方法来确保数据的安全。

一、SQLite嵌入式数据库简介

1.SQLite的产生和发展。

SQLite是2000年开发的一种强大的嵌入式关系数据库管理系统,由一个小型C库实现。它为SQL92提供了大部分支持:支持多表和索引、事务、视图、触发和一系列用户接口和驱动,适用于2006年10月9日SQLite发布的3.3.8版本,增加了全文搜索功能。

2.SQLite的特点。

SQLite实现了完整、可嵌入、零配置的SQL数据库引擎。其特点包括:

(1)事务处理是原子的。一致、独立、持久的(ACID),即使在系统崩溃和断电后。

(2)零配置,即无需设置和管理。

(3)大部分SQL92标准2标准。

(4)一个单独的磁盘文件存储一个完整的数据库。

(5)数据库文件可以在机器之间自由共享q。

(6)支持数据库文件大小到2TB。

(7)字符串和BLOG的大小仅限于可用存储容量。

(8)代码量小i即小于30K的C代码行和小于250K的代码空间(gcc在1486上)。

(9)对于绝大多数普通操作来说,比流行的C/S模式数据库引擎运行得更快。

(10)API简单易用。

可此可见,SQLite非常适合嵌入式开发,SQLite的版权允许包括商业产品在内的无限应用。

3.SQLite的系统结构。

SQLite系统结构如图1所示。主要由以下主要子系统组成:接口(Interface)是一个G语言库,从接口接收到命令后传输到编译器,编译器由三个独立步骤组成:标志处理器(To-kenizer)、分析器(Parser)、代码生成器(Codegenerator)。

如何加密SQLite嵌入式数据库?

虚拟机(VirtualMachine)是一个抽象的计算机引擎,用于操作数据库文件。在虚拟机和低层存储之间。在恢复程序之间,SQLite使用一个抽象层来执行B-树、页面缓冲(Pager)和操作系统接口(OSInterface),最后是一个存储数据的数据库。

二、SQLite加密方法分析

SQLite是一个轻型数据库,其设计目标是嵌入式的,已经在许多嵌入式产品中使用。由于SQLite还有其他优势,它也广泛应用于非嵌入式领域。例如,PHP5不再默认支持Mysql,而是默认支持SQLite。

SQLite在广泛使用的同时;为数据库的安全提供足够的保障。SQLite在Windows中采用了巧妙有效的加密方法,保证了数据的安全。

1.加密原理。

熟悉WindowsAPI后,可以知道使用Microsoft提供的加密应用界面(即CryptographyAPI),或者CryptoAPI,在不考虑基本算法的情况下,可以轻松地在应用程序中添加强大的加密功能。SQLite就是利用这一技巧,在Windows下为数据库提供安全保障。

Cryptoapi本质上是一组函数,通过操作系统为程序员提供访问加密算法的接口鼠,最终由底层CSP实现。CSP(CryptographicserviceProviders),即加密服务提供者(模块),是实现真正加密服务的独立模块。

Microsoft通过捆绑RSABaseProvider,在操作系统级提供CSP,即RSA公司的公钥加密算法:根据需要,更多的CSP可以添加到应用程序中。现在国内一些公司提供兼容Cryp-toapi的硬件设备,如全典网络(iSecureX.com)UKey300USB接口的电子钥匙、iSecureXCSP工具箱等。

应用程序CryptoAPI可以通过简单的函数调用来加密数据、交换公钥、计算消息摘要和生成数字签名等。它还提供先进的管理操作,如从一组可能的CSP中选择CSPP;此外,CryptoAPI还为许多先进的安全服务提供了基础,包括电子商务SET。PCT用于加密客户机服务器消息,PFX。数字签名等。

CryptoAPI的系统结构如图2所示。

如何加密SQLite嵌入式数据库?

目前支持Cryptoapi的Windows系统有:Windows950SR2.WindowsNTSP3及后续版本。

2.实现加密。

在分析了SQLite的源代码和接口后,我们发现SQLite有SQLite3_key和SQLite3_rekey的接口。由于SQLite打开源代码,因此可以对其进行修改,使用CryptoAPI可以方便地实现数据库的加密。

以下是数据库加密过程的实现:

(1)首先打开数据库Q使用函数sqlite3_open(Filerot,&db)打开数据库,将信息返回db,db是sqlite3类。

(2)数据库加密q使用函数intsqlite3_key(sqlite3*db、constvoid*pkey、intnkey)实现。*db指向要加密的数据库,*pkey指向加密的密码,是字符串,nkey是密码的长度。

(3)加密后关闭数据库。使用sqlite3_close(db)函数。

以上是加密一个新的SQLite数据库的过程。使用数据库涉及其他操作,参考表1可以知道操作的相应步骤。

如何加密SQLite嵌入式数据库?

为了解释,从实现的加密工程中提取了一段代码来解释问题:

sqlite3*db;定义数据库db。

char*zermsg=0;

charfilerot[256];

sqlite3_open(FileRoot,&ab);//打开数据库。

if(db=NULL)//判断是否成功打开。

{

retum-1;

}

sqlite3_key(db,“la2b3c4d”,8);//执行加密。

sqlite3_exec(db,“CREATETABLEperson(IDvarchar(18)UNIQUE,namevarchar(20);

sqlite3_prepare(db,tlinsertolistvalues(310119840125000;

/sqlite3_rekey(db,0);//更改密码操作。

sqlite3_close(db);//删除密码。

虽然只有sqlite3_key函数完成了加密操作,但值得对加密过程进行深入研究。如图3所示,加密算法的实现嵌套了多层函数,用逐步挖掘的图纸进行演示。

如何加密SQLite嵌入式数据库?

3.安全分析。

由于CryptoAPI已经广泛地应用于Windows平台上的各种加密服务,例如利用CryptoAPI实现的电子签名业务、网络信息加密等。在使用嵌入式数据库SQLite的场合,Cry ptoAPI提供的加密程度已经满足使用需要a、这是由CryptoAPI提供的完善的加密机制实现的。

CryptoAPI提供的加密体制是RSA公司的公钥加密算法争RSA公钥加密算法是由Ron Rivest,Adi Shamir和LeonardAdle-man于1977年发明的一种运算法则,它是一个网络加密和提供认证的系统。从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,被普遍认为是目前最优秀的公钥方案之。RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性能如何,而且密码学界多数人士倾向于因子分解不是NPC问题。

三、SQLite和Access的安全性比较

由于嵌入式数据库SQLite在WEB中的应用与Access数据库功能相似,所以在这里将Web开发中使用SQLite的安全性同Access相比较来证明SQLite在使用中的安全性。

实验环境:Windows XP,IE6.0,网速lOmbps。

实验内容:比较网站中SQIAte数据库与Access数据库的安全性。

实验结果参见表2(时间单位为秒)。

SQLite嵌入式数据库如何加密

SQLite在Web开发中的安全性比常用的Access要可靠,当然和大型DBMS例如Oracle、IBMDB2等相比,存在着较大的差距。但毕竟SQLite是一个小规模的数据库,能够实现这样的安全性实属不易。

四、SQLite的总结和前景

实现对SQLite数据库的加密是为推广SQLite的重要前提,也是完善一个数据库的重要方面。由于性能良好、资源占用少和零管理成本,再加上安全保障,嵌入式数据库SQLite有了用武之地,它将为那些以前无法提供用作持久数据的后端数据库的应用程序提供了高效的性能。基于SQLite的一些模块也发展起来,如PySQLite、SQLiteAnalyzer、sQLiteDB,这些模块的出现将更好地发挥SQLite的优良性能。