用C语言实现对FOXPRO程序的加密.docx
《用C语言实现对FOXPRO程序的加密.docx》由会员分享,可在线阅读,更多相关《用C语言实现对FOXPRO程序的加密.docx(10页珍藏版)》请在冰点文库上搜索。
![用C语言实现对FOXPRO程序的加密.docx](https://file1.bingdoc.com/fileroot1/2023-5/2/90b2b275-418f-45ca-810a-e985350023a7/90b2b275-418f-45ca-810a-e985350023a71.gif)
用C语言实现对FOXPRO程序的加密
用C语言实现对FOXPRO程序的加密
杨懂峰‘,王绍军2,谭学元3
<1.深圳市城市交通规划研究中心,518031;2.湖南华南光电仪器厂,415105
3.北京科技大学信息工程学院,100083)
摘要:
文章提出了FOXPRO程序加密的一种实用方法,具有较高的安全性,能防
止程序被盗、拷贝·、破密。
关卜键词:
FOXPRO;加密;解密;安全性
0概述
利用FOXPRO开发的管理系统保密性
较差。
开发人员在开发完成应用程序之后,对
防止程序被盗、拷贝、破密等方面往往大费周
折。
常规做法是在主程序或相关的程序中嵌
人口令识别程序,其方法固然可行,但对于有
一般计算机操作经验的人员来说,又显得软
弱无力。
本文就利用C语言实现对FOXPRO
程序加密谈一谈看法。
当用FOXPRO开发的程序运行正确
后,我们可利用FOXPRO本身提供的功能
统一进行编译,形成一个“EXE”文件,然后用
C语言对其文件进行全文加密。
即用自己定
义的一组序列字符与文件进行加、减、与、或
操作,形成加密文件。
件,这样就达到了保密的目的。
因而最后交给
用户的有三个文件。
它们是解密文件、已进行
加密处理的文件、组装运行执行文件。
各个应
用程序的原文件和调用方式如下所述:
加密:
(文件名是CCI.Z.C)
UdefineNULL0
#include(stdio.h)
#include(stdlib.h)
#include(process.h)
#include(io.h)
staticintDW[7]={8,5,9,1,3,8,6);
//要进行加密的自定义的序列
main(intargc.char`argv[])
{FILE‘fp。
’fl;
if((fp=fopen(argv[1]."rb"))==NULL)
//要进行加密的原文件
igotoxy(20,8);
print'f('‘原文件不存在!
加密不能进行,请退
1加密方法
具体的操作方法如下:
首先,把FOXPRO的程序调试好,形成
FOXPRO的“EXE”可执行文件(如
FOXB.EXE),然后对这个文件进行加密,变
为加密文件(FOXB.DAT),同时设置一个解
密程序(文件名为CCZI_.EXE),可以对已加
密的文件进行解密。
再用C语言开发一个组
装运行程序,把我们的解密过程、程序执行过
程和删除解密程序的过程形成一个整体文
出⋯”):
exit(0);
if(fl=fopen(argv[2],"wb"))==NULL)
刀加密后的文件
{gotoxy(20,8);
printf(”形成新文件失败!
不能工作请退出
⋯,‘);
exit(0);
intk;charch,c;k=o;
while(!
feof(fp))
{if(ki6)k=0:
c=fgetc(fp):
//加密处理
、h=c+T)W[k];
收稿日期:
2的。
一11---22
.34.
《电脑与信息技术ii2001年第1期
fputc(ch_fl);
fclose(fp);fclose
k十+;}
(fl);}
调用方式:
CCLZFOXB.EXEFOXB.DAT
"FOXB.EXE":
FOXPRO的执行文件
"FOXB.DAT":
加密后的文件
2解密方法
解密:
(文件名是:
CCZ1..C
#defineNULL0
#include(stdio.h)
#include(stdlib.h)
#include(process.h)
#include(io.h)
staticintDW[7]={8,5,9,1,3,8,6);
刀解密的序列必须与加密序列相同
main(intargc,char'argv[])
(FILE'fp,‘fl;
if(Up=fopen(argv[1],"rb"))==NULL)
//要进行解密的数据文件
(gotoxy(20.8);
printf“数据文件不存在卫加密不能进行,请
退出⋯”);
exit(0);}
if((fl=fopen(argv[2],"wb"))==NULL)
刀解密后的文件
(gotoxy(20,8);
printf”形成新文件失败I不能工作请退出
⋯”);
exit(O);〕
intk;charch,c;k=o;
while!
feof(fp))
(if(k)6)k=0;
/解密处理过程正与加密过程相反
#include(io.h)
voidWIN(intsx,intsy,intex.intey,intbk,
intcolor)
(window(sx,sy,ex,ey);
textbackground(bk);
clrscr();
textcolor(color);)
main)
(in(k;
WIN(0,1.80,25,1,12);
gotoxy(20,8);
printf("系统正在进行初始化,请等待⋯“);
k=system(”CCZLFOXB.DATFOXGL.
EXE");//解密过程
k=system("FOXPROFOXGL.EXE");
刀调用FOXPRO程序
k=system("DELFOXGL.EXE");
刀删除解密后的文件
}
调用方法:
MAIN
这个文件是我们移交给用户的主执行文件:
用
户只要在命令提示符下打人MAIN.EXE就可完成
解密、运行、删除等操作。
制作安装盘:
(文件名INSTALL.C)
include(stdio.
include(stdlib.
h)
h)
##
c=fgetcUp);
fputc(ch.fI);
ch二c一DW[k];
k-l-+;}
fclose(fp);Hose(fl);}
调用方式:
CCZLFOXB.DAT
FOXGI-EXE
"FOXB.DAT":
己加密的文件
"FOXGL.EXE":
解密后的FOXPRO执行文件
主调文件:
(文件名MAIN.C)
#include(stdio.h)
#include(stdlib.h》
#include(process.h、
#include(process.h)
#include(io.h)
voidWIN(intsx,intsy,intex,intey,intbk,
intcolor)
(window(sx,sy,ex,ey);
textbackground(6k);
clrscr();
textcolor(color);}
main()
(intk;
WIN(0.1,80,25,1,12);
gotoxy(20,8);
k=system("c:
”);‘
k=system("mdc:
\馆I");
k=system("mdc:
\准1\\dbf");
k=system("copya:
\\main.exec:
\\gl");
k二system("copya:
\\clzl.exec:
\馆1");
k=system("copya:
\\foxb.datc:
\\g1_);
k=system("copya:
\\readme.exec:
\\g1_);
《电脑与信息技术》2001年第1期·35·
k=system("a:
\\arjea:
\\dbf.arjc:
\\gl\
dbf");
调用方法:
A:
INSTALL
这种操作的前提是把要移交给用户使用
的三个文件和操作说明文件存放在A盘根
目录下,把数据库文件存放在A盘的DBF
目录下。
给用户安装时只要使用INSTALL
就可完成整个程序的安装运行。
3结束语
通过以上加密过程形成的加密文件是任
何反编辑的软件不能进行反编辑的,若有人
要对其进行破密也非三言二语就能达到目
的,从而达到对软件的一种保护。
但同时我们
也应该知道,这种加密文件是不能直接运行
的,在运行时需要解密,解密的过程是加密过
程的反向操作,运行完毕之后再删除这个文
件,从而达到保密目的。
上述的加密程序不仅
适应FOXPRO的程序,而且适用于对数据
库加密和其它软件的加密,可以给用户开发
程序形成一种安全保护。
上述操作的4个C
语言程序是用TC2.0编写,FOXPRO程序
是用FOXPROFORDOS2.5编写,均已运
行通过。
参考文献:
[1]Foxpro2.6语言详解.学苑出版社,1994.
[2]VisualC十+使用速成.清华大学出版社.1996.
(上接第17页)
4LNX与UCI的区别
LNX和UCI都是MATRIXx
表3
部程序接口。
但在使用过程中,两种机制的使
用方法不同、程序调用的出发点不同、Xmath
在调用过程中所扮演的角色也不同,从表3
提供的外可看出这两种接口机制的区别。
LNX与UCI的特征比较
比较
数据结构
函数
创建
运行
UCI启动Xmath;LNX被Xmath启动
使用相同的数据结构—externType
UCI:
必须使用函数XmathStart和XmathStop;一定不能使用函数XmathMain
LNX:
必须使用函数XmathMain:
一定不能使用函数XmathStart和XmathStop
用户程序必须包括头文件xmathlib.h;必须连人Xmath.lib
UCI:
利用命令一callprogram-name开始调用Xmath
LNX:
LNX程序可以像其它MatliScrip:
函数一样使用
5结论
LNX和UCI技术很好地实现了专业化
仿真软件与通用编程语言的无缝联接。
这种
接口技术既是众多专业化软件拓展市场的一
种手段,也是软件发展的趋势。
不过,LNX和
Uci的接口技术仍嫌复杂,还应进一步简
化。
对用户来说,简单实用才是他们选择的标
准。
参考文献:
仁1]ISI.MATRIXxVersion6.XDocument.Integrated
[21
仁3]
谭浩强.C程序设计.清华大学出版社.1996.
李薇.徐国标.OpenGL人门与提高.西南交通大
学出版社.1998.
[4]SunZhaowei.XuGuodong.
Theintegratedsystemfor
simulationandevaluation
LinXiaohui.CanXibin
design.
ofthe
AdvancesinEngineeringSoftware.
analyse.system
smallsatellite.
2000(31):
437-
443.
['S」E.Bfernandez.JieWu.andHaifengQian.A
COMBINEDFUNCTIONALANDOBJECT
ORIENTAPPROACHTOSOFTWAREDESIGN
InternationalJournalof(
Applications.2000.22
(2):
,omputers
System.
36.
Inc.1998.
《电脑与信息技术》2001年第I期__