Chinaunix首页 | 论坛 | 博客
  • 博客访问: 33172
  • 博文数量: 8
  • 博客积分: 266
  • 博客等级: 二等列兵
  • 技术积分: 140
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-14 15:53
文章分类
文章存档

2012年(8)

我的朋友

分类: Mysql/postgreSQL

2012-06-27 11:09:30

我们大家都知道DBF的数据结构分为三部分:文件头部分、字段描述部分和记录部分。文件头部分的第一个字节是chr(03),这样,就可以通过修改文件头的第一个字节,使启用正常的打开方式不能浏览数据库内容,达到的目的;解密时,将加密数据库文件的文件头第一个字节修改为正常的数据库文件的第一个字节,即可对它进行正常操作。那么我们怎么将FOXPRO中的DBF文件呢?

一、加密函数

    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)”,如果要解密多个加密数据库文件,则多调用几次解密函数即可。

    在表单中,点击“加密”按钮,则执行加密操作,点击“解密”按钮,执行解密操作。
 
    你看,就这样FOXPRO中的DBF的文件就加密。只要按照上面的操作方法二文件就可以解密,你学会了吗?我们将在以后的章节内给大家介绍更多的数据库文件加密的知识,敬请大家关注。
阅读(2751) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~