关于DBF表的加密&解密。

最近给公司做了一个工资系统,拿给公司的劳资员用,因为是几个人共用一台电脑,所以我的工资系统设置了密码,只有通过输入正确的密码才能进入工资系统。现在遇到一个问题就是:如果不知道密码的非法用户不直接进入工资系统,而是通过我放gzsj.dbf的文件夹来直接打开gzsj.dbf文件,从而修改里面的内容怎么办?因为经常要变动gzsj.dbf里的数据,所以又不能把gzsj.dbf这个表包含在项目中而把他和其他程序连编成一个整体。那样的话在进入工资系统后就不能修改gzsj.dbf里的内容了。

所以想对DBF表进行加密或解密。
---------------------------------------------------------------

*前提:被操作的表如果已经打开,一定要先关闭

*---------------------------------------
DBF_JM('temp.dbf',1) &&加密

DBF_JM('temp.dbf',0) &&解密

FUNCTION DBF_JM
PARAMETERS filename,jm
IF AT('.',filename)=0
filename=filename+'.dbf' &&处理文件名
ENDIF
IF jm=1 &&加密
handle=FOPEN(filename,2) &&打开文件
keybite=FREAD(handle,1) &&读表头第一个字节
=FSEEK(handle,0) &&指针移回第一个字节
=FWRITE(handle,CHR(ASC(keybite)+2)) &&用比原来高2的ASCII字符改写
=FCLOSE(handle) &&关闭文件
ELSE &&解密
handle=FOPEN(filename,2)
keybite=FREAD(handle,1)
=FSEEK(handle,0)
=FWRITE(handle,CHR(ASC(keybite)-2)) &&用比原来低2的ASCII字符改写
=FCLOSE(handle)
ENDIF
ENDFUNC

*---------------------------------------

FUNCTION DBF_JieMi &&解密
PARAMETERS lfile
lfn=ALLTRIM(lfile)
lh=FOPEN(lfn,12)
=FSEEK(lh,0,0)
=FSEEK(lh,8)
lk1=FREAD(lh,1)
lk2=FREAD(lh,1)
=FSEEK(lh,0,0)
=FSEEK(lh,8)
=FWRITE(lh,CHR(ASC(lk1)-2),1)
=FWRITE(lh,CHR(ASC(lk2)-2),1)
=FCLOSE(lh)
RETURN
ENDFUNC

FUNCTION DBF_JiaMi &&加密
PARAMETERS lfile
lfn=ALLTRIM(lfile)
lh=FOPEN(lfn,12)
=FSEEK(lh,0,0)
=FSEEK(lh,8)
lk1=FREAD(lh,1)
lk2=FREAD(lh,1)
=FSEEK(lh,0,0)
=FSEEK(lh,8)
=FWRITE(lh,CHR(ASC(lk1)+2),1)
=FWRITE(lh,CHR(ASC(lk2)+2),1)
=FCLOSE(lh)
RETURN
ENDFUNC

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus