Visual Foxpro加密数据库文件

我们在用Visual Foxpro开发程序时常常会遇到数据库文件的安全问题,如何使数据库文件不被非法修改是我们需要解决的课题。下面将笔者在实际编

程中采用的加(解)密数据库文件的方法介绍给大家。

 

一、加密、解密思路

 

我们知道数据库文件(.dbf)的数据结构分为三部分:文件头部分、字段描述部分和记录部分。文件头部分的第一个字节是chr(03),这样,就可以

通过修改文件头的第一个字节,使启用正常的打开方式不能浏览数据库内容,达到加密的目的;解密时,将加密数据库文件的文件头第一个字节修改为

正常的数据库文件的第一个字节,即可对它进行正常操作。

 

二、加密函数

 

function jiami

 

parameters dbf_f_name,curs_set

 

dbf_f_name=upper(alltr(dbf_f_name))

 

private all

 

if .not. file(dbf_f_name)

 

=messagebox(“”要加密的文件不存在!!””,0+48,””错误提示””)

 

else

 

if ! “”.DBF”” $ dbf_f_name

 

dbf_f_name=dbf_f_name+””.DBF””

 

endif

 

hle=FOPEN(dbf_f_name,2)

 

if hle>0 &&打开文件成功

 

fbyte=FREAD(hle,1)

 

=FSEEK(hle,0)

 

=FWRITE(hle,iif(fbyte==chr(3),chr(0),chr(26)))

 

&&假如第一个字节是chr(3)则用chr(0),否则用chr(26)写入

 

=FCLOSE(hle)

 

else

 

=messagebox(“”试图文件打开错误!!””,0+48,””加密错误提示””)

 

endif hle>0

 

endif

 

return

 

三、解密函数

 

function jiemi

 

parameters dbf_f_name,curs_set

 

dbf_f_name=upper(alltr(dbf_f_name))

 

private all

 

if .not. file(dbf_f_name)

 

=messagebox(“”要解密的文件不存在!!””,0+48,””错误提示””)

 

else

 

if ! “”.DBF”” $ dbf_f_name

 

dbf_f_name=dbf_f_name+””.DBF””

 

endif

 

hle=FOPEN(dbf_f_name,2)

 

if hle>0

 

fbyte=FREAD(hle,1)

 

=FSEEK(hle,0)

 

if fbyte=chr(0).or.chr(26)

 

=FWRITE(hle,iif(fbyte=chr(0),chr(3),chr(245)))

 

endif

 

=FCLOSE(hle)

 

else

 

=messagebox(“”试图文件打开错误!!””,0+48,””解密错误提示””)

 

endif hhandle>0

 

endif

 

return

 

四、调用加(解)密函数

 

启动VFP,将加密、解密函数在程序调用之前定义,然后建立表单,在表单中建立两个命令按钮,命名为“加密”、“解密”;

 

在命令按钮“加密”的click事件中添加代码:“=jiami(“”要加密的数据库文件名””,off)”

 

如果要加密多个数据库文件,则调用几次加密函数即可);

 

同理在命令按钮“解密”的click事件中添加代码:“=jiemi(“”要解密的数据库文件名””,off)”,如果要解密多个加密数据库文件,则多调用几

次解密函数即可。

 

在表单中,点击“加密”按钮,则执行加密操作,点击“解密”按钮,执行解密操作。

 

注:以上程序在Windows98、Vfp5.0/6.0下调试通过。

 

 » 本站地址:http://www.gomoth.com

标签: ,