对数据库DBF文件的彻底加密 求知 1997-01-01   FoxPro数据库语言应用非常广泛,但有一个问题一直困扰着大家,那就是所有的.DBF数据库文件都是不加密的,也就是说:任何一个人都可以在FoxPro环境下用use命令打开它,并随意更改它里面的数据。   针对这些问题,我利用了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的差数改变一下,比如做个条件判断,那么即使别人知道了你的加密方法,也不能解开你的库了,因为条件是你任意给的。具体做法我就不多说了,留给你一个思路吧!