对数据库DBF文件的彻底加密
针对这些问题,我利用了FoxPro的底层函数加密成为一个普通的二进制文件,使整个数据库不仅表头,而且表内数据均面目皆非,使非法操作者无法浏览、更改其中的数据,即使用PCTOOLS等工具软件也难以看清它的本来面目,给您的数据上了一把锁。而您自己却可以用个解密参数就能正常使用了。
#3 *加密用法:DO JJM WITH 欲加密的文件名,JIAMI
#3 *解密用法:DO JJM WITH 欲解密的文件名,JIEMI
FUNCTION JJM
PARAMETERS k-name,jj
PRIVATE k-name,k-jmgo,k-jb,k-mr
CLEA
CLOS ALL
IF AT(".",k-name)=0 &&判断命令行的数据库名是否有.DBF后缀,没有则加上
k-nameq=k-name
k-name=k-name+".DBF"
ELSE
k-nameq=SUBSTR(k-name,1,AT(".",k;-name)-1)
ENDIF &&k-nameq为数据库的主文件名
IF USED(k-nameq)
wait"JIAMI()不能修改已经打开的数据库,请关闭数据库"+UPPER(k-nameq)+"后再试!"; WINDOWS
RETURN (.F.)
ENDIF
k-jb=FOPEN(k-name,2) &&打开这个文件,并确定句柄
IF k-jb=-1
WAIT "JIAMI()由于程序目前状态原因,不能;打开这个数据库"+k-nameq+;
"请检查您的系统环境!" WINDOWS
RETURN (.F.)
ENDIF
STORE FSEEK(k-jb,0,2) TO gnend &&把指针移到EOF
STORE FSEEK(k-jb,0) TO gntop &&把指针移到BOF
IF gnend<=0 &&文件“空”吗?
WAIT WINDOW 这个文件是空的! NOWAIT
ENDIF
=FSEEK(k-jb,0) &&将文件指针移回第一个字节
FOR COUNT=1 TO gnend
k-mr=FREAD(k-jb,COUNT) &&读取表头的第count字节
=FSEEK(k-jb,COUNT-1) &&将文件指针移到第count字节
DO CASE
CASE jj= jiami
=FWRITE(k-jb,CHR(ASC(k-mr)+2 )) &&用比原来高两位的ASCII字符改写
CASE jj= jiemi
=FWRITE(k-jb,CHR(ASC(k-mr)-2)) &&用比原来高两位的ASCII字符改写
OTHER
WAIT"请附加参数到JJM之后,JIAMI;为对文件加密,JIEMI为对文件解密"WINDOWS
RETURN (.F.)
ENDCASE
ENDFOR
=FSEEK(k-jb,0) &&将文件指针移回第一个字节
?FREAD(k-jb, gnend) &&显示变化后的文件内容
=FCLOSE(k-jb) &&关闭文件
CLOS ALL
CLEA ALL
RETURN (.T.)
如果您把欲改写的位数或ASCII的差数改变一下,比如做个条件判断,那么即使别人知道了你的加密方法,也不能解开你的库了,因为条件是你任意给的。具体做法我就不多说了,留给你一个思路吧!