在Delphi 7中使用加密的SQLite


======================================================
注:本文源代码点此下载
======================================================

sqlite是一个很好用的单机数据库,体积小巧,支持大多数sql 92语法,速度快,健壮,使用和分发都很简单。但是免费开源版并不提供加密功能,需要加密得购买原作者的一个插件,价格$2000!我们只好使用第三方的加密版本,这是被逼的。当然还有一个选择就是,在开源的c文件中已经预留了加密接口,有能力的可以自己去实现。

闲话休提。第三方的加密版本已经有人实现了,还不止一个。下面分别介绍一下:

※sqlite原装版,http://www.sqlite.org/ 目前最新版本是3.6.10。但我们现在不使用它的dll而用第三方,所以可以无视它了。需要源文件的可以去下载。

※第三方其一是用于.net环境下的system.data.sqlite.dll。它是为了.net开发的,不过也集成了原生sqlite.dll,把它改名为sqlite3.dll,直接就可以拿来用了。因为使用了windows的api来加密,所以不能跨平台,但是delphi的程序本来就不能跨平台:)。目前版本1.0.60.0,无源文件,使用的sqlite版本应该是3.5.4。

文件:system.data.sqlite.dll(用时改名为sqlite3.dll)

大小:839680 b; md5:4c42911e64bda2095434189ff8393519

链接地址: http://sqlite.phxsoftware.com/

※第二种实现是wxsqlite3。它是跨平台的wxwidgets 开源函数库的一部分,在win32平台也工作得很好。使用md5 + rc4 + 128位aes加密算法,提供cpp源文件。目前版本是1.9.4,使用的sqlite版本是3.6.10。☆推荐使用☆

文件:sqlite3.dll,大小:532480 b,

md5:70c3bbdc4b90aeb19b7381b514558558

链接地址:http://wxcode.sourceforge.net/components/wxsqlite3/

※delphi数据库控件zeoslib,是一个用来连接数据库的第三方开源控件包,据说是用来取代bde的,确实好用,但据反映在一定情况下可能有内存泄漏问题。目前版本是6.6.4,支持ado、asa、firebird、interbase、mssql、mysql、oracle、postgre sql、sqlite、sybase的各种版本,如sqlite2、sqlite3、firebird 1.5、firebird 2.0、firebird嵌入版等等。☆大力推荐☆

地址:http://zeos.firmos.at/

下面终于可以开始进入正题了,在delphi 7中如何调用sqlite的加密函数?

首先,安装zeos控件包,把我们的支持加密的sqlite3.dll文件copy到程序目录下。这里要跳出来说明一下的是,对于sqlite3加密函数的调用,在zeos 6.6.2版本之前是不支持的,需要打个补丁才行,现在已经加入到最新的版本之中了。但是网上的调用说明是有问题滴,这也是为什么要写这个文档的原因。

在程序上放一个tzconnection,名为zconnection1,设置连接数据库的参数,这些就不废话了。又跳出来一下:据说sqlite3是使用utf8编码,所以如果数据库放在中文目录下,则调用路径必须进行编码转换才行;但是用zeos连接sqlite,放在中文目录下都没问题。搞不好zeos已经自动把编码搞定了?太贴心了。

1、打开加密的数据库

var

db: pointer;

pwd: string;

i: integer;

begin

pwd := 'xxxxxx';

zconnection1.connected := true;

db := (zconnection1.dbcconnection as izsqliteconnection).getconnectionhandle;

i := (zconnection1.dbcconnection as izsqliteconnection).getplaindriver.key(db, pchar(pwd), length(pwd));

………………

2、给未加密的数据库加密或修改密码

procedure rekeydb(conn: tzconnection; pwd: string);

var

db: pointer;

i: integer;

begin

db := (conn.dbcconnection as izsqliteconnection).getconnectionhandle;

i := (conn.dbcconnection as izsqliteconnection).getplaindriver.rekey

(db, pchar(pwd), length(pwd));

if (i// 函数正常执行返回0,否则

begin

// xxxxxxx

end;;

end;

注:izsqliteconnection 的定义在zdbcsqlite单元。

以上。最后要注意的就是对sqlite3.dll的加密实现各不相同,dll文件可是不能混用的。


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值