操作系统课程设计文件加密
前 言
操作系统是计算机系统中最重要的系统软件,Linux操作系统是源码公开的实用的现代操作系统,利用Linux作为操作系统实验的平台,不但可以理解操作,系统原理,同时也可以作为操作系统开发战的演练。
在计算机软硬件课程的设置上,它起着承上启下的作用。其特点是概念多、较抽象和涉及面广,其整体实现思想和技术又往往难于理解所有用户在使用计算机时都要得到操作系统提供的服务。因此本课程的目的与任务是使学生通过本课程的学习,理解操作系统的基本概念和主要功能,掌握常用操作系统(如Linux/Windows)的一般使用和管理方法,从而为学生以后的学习和工作打下基础。本学期通过对《计算机操作系统》这门课程的学习,对操作系统相关知识有了更进一步的认识。
本设计实现了文本文件的解密及解密,运行软件之后只需输入任意一个文本文件名及后缀名即可对该文本文件进行加密或解密操作。本设计的加密与解密系统,使用了面向各类文件的方法,运用Microsoft Visual C++ 6.0实现具有加密、解密、帮助信息、读取文本文件、显示结果、退出等功能的文件加密与解密系统。
目录
一、 系统环境 ................................................................................................. 1
1.硬件环境 ................................................................................................ 1
2.软件问
................................................................................................ 1 二、 设计目的 ................................................................................................. 2 三、 总体设计 ................................................................................................. 3
1.程序设计 ................................................................................................ 3
2.流程图 .................................................................................................... 4 四、 详细设计 ................................................................................................. 6 五、 调试与测试 ............................................................................................. 8
1.调试 ........................................................................................................ 8
2.测试 ........................................................................................................ 9 六、 设计中遇到的问题及解决方法 ............................................................. 11 七、 源程序清单 ........................................................................................... 12 八、
与体会 ........................................................................................... 15 九、 参考文献 ............................................................................................... 16
河南城建学院操作系统课程设计
一、 系统环境
1.硬件环境 Intel(R)Core (TM)2 Duo CPU 频率1.59GHz
内存2.00GB
2.软件问题 操作系统Microsoft Windows XP Professtonal
编辑环境 visual C++
VMware系统下的Linux系统
版本 2002
Service Pack 3
第1页 共16页
河南城建学院操作系统课程设计
二、 设计目的
有时我们有些资料不希望别人看到,最常用的方法就是加密。对给定的相关文件进行加密可以对文件进行保护,可以防止某些重要信息不被别人所知道甚至窃取。对文件起到保护作用,可以方便用户使用某些只有自己能知道的信息,能够安全保护文件的相关内容几信息不被外流。本设计就是通过利用UNIX系统提供的机制将文件上传,并保存于root的根目录中,进而在UNIX环境下为文件修改姓名,通过vi编辑器使文件变为可编辑文件,进而对文件的错误进行修改,运用cc 文件名 的方式是文件成为可编译文件,利用执行文件的命令根据提示将文件中的程序进行执行,其主要操作是对已经上传的文件进行加密操作,形成anma的txt文件;再对文件进行解密,实现对原文件解密,时期变换成文可以看得懂的语言。
第2页 共16页
河南城建学院操作系统课程设计
三、 总体设计
1.程序设计
本设计采用按字符异或的加密算法对文档进行加密形成密文,而后,用同样的算法配合密钥和密钥循环长度可以对密文进行解密。程序从命令行携带文件名(in)、操作方式(Op)、密钥(pwd)、加密钥循环使用长度(length)四个参数,其中pwd和length可以忽略,程序为忽略的情况提供了缺省值。若命令行带入的参数少于两个,即没有参数或只有第一个参数,程序提供了输入块对四个参数进行输入。
对文件的加密就是利用加密算法对所上传或者所编辑的文件进行编码使其形成密文来达到加密的目的,而加密算法是通过一组密钥对文件进行,即原始信息进行一系列的数学运算得到的另一组信息,或者称为乱码来形成加密过程。采用同样的算法和同样的密钥,可以从密文算回原始信息(明文),这就是解密过程。
第3页 共16页
河南城建学院操作系统课程设计
2.流程图
第4页 共16页
河南城建学院操作系统课程设计
第5页 共16页
河南城建学院操作系统课程设计
四、 详细设计
int main(int argc,char *argv[])
argc 是外部命令参数的个数,argv[] 存放各参数的内容.在运行程序以后,操作系统会自动将参数传给你。例如编译好的程序叫做program.exe 你运行program a b 这个时候,argc = 3 argv[0] = "program" argv[1] = "a" argv[2] = "b"
fopen ( string filename, string mode)
fopen函数用来打开一个文件,其调用的一般形式为:文件指针名=fopen(文件名,使用文件方式); 其中,“文件指针名”必须是被
为FILE 类型的指针变量; “文件名”是被打开文件的文件名;“使用文件方式”是指文件的类型和操作要求。“文件名”是字符串常量或字符串数组。
文件使用方式意义:
“rt” 只读打开一个文本文件,只允许读数据
“wt” 只写打开或建立一个文本文件,只允许写数据
“at” 追加打开一个文本文件,并在文件末尾写数据
“rb” 只读打开一个二进制文件,只允许读数据
“wb” 只写打开或建立一个二进制文件,只允许写数据
“ab” 追加打开一个二进制文件,并在文件末尾写数据
“rt+” 读写打开一个文本文件,允许读和写
“wt+” 读写打开或建立一个文本文件,允许读写
“at+” 读写打开一个文本文件,允许读,或在文件末追加数据
“rb+” 读写打开一个二进制文件,允许读和写
“wb+” 读写打开或建立一个二进制文件,允许读和写
“ab+” 读写打开一个二进制文件,允许读,或在文件末追加数据
fputc(char ch,FILE *fp);
作用: 把一个字符写到磁盘文件上去,即将字符ch输出到fp所指向的文件中去。
返回值: 成功:返回值就是输出的字符;
失败:返回EOF(-1)。
fgetc(FILE *fp);
作用:从指定的文件读入一个字符,即从fp所指向的文件中读入一个字符。
返回值: 成功:返回值所得到的字符;
失败:返回EOF(-1)。
第6页 共16页
河南城建学院操作系统课程设计
feof(FILE *fp)
作用:检查文件是否结束。
返回值: 遇文件结束符返回非零值,否则返回0
void jiami(char *in,char *pwd,int length) /*加密*/ 声明并定义一个jiami函数,用来完成对文件的加密过程。
void jiemi(char *in,char *pwd,int length) /*解密*/
声明并定义一个jiemi函数,用来完成对加密过后的解密过程。
第7页 共16页
河南城建学院操作系统课程设计
五、 调试与测试
1.调试
(1)输入如下图所示代码,打开地址
(2) 按照步骤1地址,首先上传一个文件,然后上传一个待加密文件
第8页 共16页
河南城建学院操作系统课程设计 (3) 将上传文件类型改为c语言格式,并进行编译。
(4)执行文件,并输入相关信息,执行结果如图所示
2.测试
(1)对加密后的文件测试,如图所示,
第9页 共16页
河南城建学院操作系统课程设计
(2)测试结果与期望一致
(3)再次运行程序把密文解密
第10页 共16页
河南城建学院操作系统课程设计
六、 设计中遇到的问题及解决方法
在进行课程设计初期,由于之前对unix的了解不足和上机经验不丰富,在进行文件上传的时候就遇到了困难,后来邵老师给大家说了一种方法后,就可以根据指导进行上传文件,省掉了很多事,再上传文件的时候由于自己的粗心,在没有建立要上传文件的时候就进行上传,导致一直错误,自己也认为是很低级的错误,不过后来经过检查也解决掉了。
对文件完成加密操作后,会形成一个名为anma.txt的文本文档,有时候会在根目录root中不会出现,进行刷新操作后才会出现。另外在课设过程中有很多郁闷的时候,一个小小的代码错误一不小心就花去了自己一上午的时间,所以在这个过程中能够磨练人的意志与耐心。
第11页 共16页
河南城建学院操作系统课程设计
七、 源程序清单
#include
#include
#include
void jiami(char *in,char *pwd,int length); /*函数声明*/
void jiemi(char *in,char *pwd,int length); /*函数声明*/
int main(int argc,char * argv[]) {
char in[30]; /*需要加密或解密的文件名*/
int length; /*加密钥循环使用长度*/
char pwd[8]; /*加密钥*/
char Op[10]; /*操作方式*/
if(argc<3) /*如果从命令行带入的参数少于两个,刚提示输入*/
{
printf("You must enter filename and Operation mode!\n");
printf("Input filename:\n");
scanf("%s",in);
printf("Input Operation mode:\n");
scanf("%s",Op);
printf("Enter password:\n");
scanf("%s",pwd);
printf("Input length:\n");
scanf("%d",&length);
}
else
{
if(argc==3) /*命令行带两个参数,后两个忽略,则给后两个参数提供缺省
值pwd[]="00000000",length=8*/
{
strcpy(in,argv[1]);
strcpy(Op,argv[2]);
strcpy(pwd,"00000000");
length=8;
}
else if(argc==4) /*若从命令行带入三个参数,刚对length提供缺值8*/
{
strcpy(in,argv[1]);
strcpy(Op,argv[2]);
strcpy(pwd,argv[3]);
length=8;
}
else
第12页 共16页
河南城建学院操作系统课程设计
{
strcpy(in,argv[1]);
strcpy(Op,argv[2]);
strcpy(pwd,argv[3]);
length=(int)argv[4]-48;
}
}
if(strcmp("jiami",Op)==0)
jiami(in,pwd,length); /*调用加密*/
else if(strcmp("jiemi",Op)==0)
jiemi(in,pwd,length); /*调用解密*/
else
printf("Input error!"); }
void jiami(char *in,char *pwd,int length) /*加密*/
{
FILE *fp1,*fp2;
char ch;
int j=0;
fp1=fopen(in,"rb"); /*为输入打开一个二进制文件*/
if(fp1==NULL)
{
printf("Cannot open in-file!\n");
exit(1);
}
fp2=fopen("anma.txt","wb"); /*为读写建立一个新的二进制文件*/
if(fp2==NULL)
{
printf("Cannot open or create output-file!\n");
exit(1);
}
ch=fgetc(fp1);
while(!feof(fp1))
{
fputc(ch^pwd[j>=length?j=0:j++],fp2); /*按字符异或加密*/
ch=fgetc(fp1);
}
fclose(fp1);
fclose(fp2);
}
void jiemi(char *in,char *pwd,int length) /*解密*/ {
FILE *fp1,*fp2;
第13页 共16页
河南城建学院操作系统课程设计
register char ch; /*寄存器变量ch */
int j=0;
fp1=fopen(in,"rb"); /*为输入打开一个二进制文件*/
if(fp1==NULL)
{
printf("Cannot open in-file!\n");
exit(1);
}
fp2=fopen("mingma.txt","wb"); /*为读写建立一个新的二进制文件*/
if(fp2==NULL)
{
printf("Cannot open or create output-file!\n");
exit(1);
}
ch=fgetc(fp1);
while(!feof(fp1))
{
fputc(ch^pwd[j>=length?j=0:j++],fp2); /*按加密方法进行解密*/
ch=fgetc(fp1);
}
fclose(fp1);
fclose(fp2);
}
第14页 共16页
河南城建学院操作系统课程设计
八、 总结与体会
通过一周的课程设计,是自己感受颇深,不仅有关于操作系统方面的,更多的是关于文件加密源代码的理解和我们的整体合作精神,并且在自己动手操作过程中知识从无到有的收获与乐趣。
我们组一共有三个同学,分工明确,合作顺利。我们经过几天简短的时间,认真努力积极的准备这次设计,调试了多次程序运行的代码。虽然我们的程序修改多次,并且由于只是熟悉和了解本上的理论知识,实际操作比较少,而且操作不熟练,在不断地咨询和自己上级试验琢磨后终于做出了我们的设计,同时感谢老师和同学的耐心指导。
本次操作系统课程设计给我的最大的印象兴趣是最好的老师,只要有兴趣,
困难在你的勇气和毅力下是可以迎刃而解的。
第15页 共16页
河南城建学院操作系统课程设计
九、 参考文献
1、汤小丹,梁红兵编著?《计算机操作系统》,第三版,?西安电子科技大学出版社,2007
2、严蔚敏,吴伟民编著?《数据结构》,C语言版,?清华大学出版社,2007
3、张尧学,史美林,张高编著?《计算机操作系统教程》,第3版,?清华大学出版社,2006
第16页 共16页