您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 操作系统文件加密系统课程设计报告
河南城建学院《操作系统原理》课程设计报告书班级:0834131专业:信息管理与信息系统(本科)课程名称:操作系统原理指导教师:魏新红设计题目:文件加密储存学号:姓名:同组人员:计算机科学与工程学院2015年12月前言随着网络技术的不断发展,人们的个人信息、网络间的文件传递、电子商务等方面都需要大力的保护,文件加密技术也就随之产生。文件的加密主要是由加密算法实现,加密算法有多种,本程序设计对文件的加密使用的是最基础的异或加密算法与防射函数加密算法共同对文件进行双层加密。加密技术是电子商务采取的主要安全保密措施,是最常用的安全保密手段,利用技术手段把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原(解密)。加密技术包括两个元素:算法和密钥。算法是将普通的文本(或者可以理解的信息)与一窜数字(密钥)的结合,产生不可理解的密文的步骤,密钥是用来对数据进行编码和解码的一种算法。在安全保密中,可通过适当的密钥加密技术和管理机制来保证网络的信息通讯安全.C语言具有简单、安全、可移植、面向对象、健壮、多线程、体系结构中立、解释执行、高性能、分布式和动态等主要特点。本程序充分利用C语言的特点,针对当下社会比较重视的文件加密,设计了本程序。使用本程序可以对txt,word等多种文件进行加密解密,使用便捷实用,功能完善,满足了用户对文件安全性的需求。-1-目录一、系统环境.........................................-2-二、设计目的........................................-2-三、总体设计.........................................-3-四、详细设计.........................................-4-4.1加密算法......................................-4-4.2系统调用......................................-4-五、调试与测试.......................................-6-六、遇到的问题及解决方案.............................-8-七、程序源代码.......................................-8-心得体会............................................-12-参考文献............................................-13--2-一、系统环境Windows平台下安装VMware虚拟机来搭建Linux平台,操作系统环境是RedHatLinux9,语言开发环境是Linux的GNUC或C++。硬件环境:计算机一台,局域网环境软件环境:虚拟机下的RedHatLinux9二、设计目的学习计算机软件技术,特别是计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。如何学习和掌握操作系统技术的原理与实际技巧呢?除了听课和读书之外,最好的方法恐怕就是在实践中练习。例如,自己设计一个小型操作系统,多使用操作系统,多阅读和分析操作源代码等。但由于我们的条件和学时有限,在理论学习过程中没有给同学们提供更多的实验机会。本操作系统课程设计,是给同学们提供一个集中实验的机会。本次课程设计文件加密存储要实现以下要求:(1)利用文件系统的系统调用编程对文件的内容进行加、解密;(2)要求程序从环境的命令行携带4个参数。第一个是文件名,第二个是操作方式,第三个是密钥,第四个是加密钥循环使用长度。其中后两个参数是可以忽略,但对忽略的情况要提供缺省值;(3)要求最后实现对文件的加密转储,或通过改道的办法进行转储。对于已加密的文件可以进行解密显示或解密后转储。形成加密或解密文件后要删除原来的文件;(4)建议加密过程使用按字符进行异或的方式处理,也可以是仿射加密方式,比如把所有的字符做一个平移变换:A-A+C(A为任意字母表中的字母,C为常数,为了防止越界或溢出,可以改造其为A-(A+C)MOD256),这里要提醒的是,要注意逆变换;(5)设计者也可以提供自己的加密方式。-3-三、总体设计实现对文件的加密与解密,要求有图形用户界面。细则如下1.能够对一个文件进行加密;2.加密后生成一个新文件为“anma””,并删除源文件;3.能将加密生成的文件还原成原文件名为“mingma”。NYYYYYNNNNNNNNN配置默认循环长度加密操作是否加密开始程序键盘接收参数配置默认的密钥与循环长度Argc3Argc==3Argc==4提示错误解密操作是否解密结束-4-四、详细设计4.1加密算法本设计采用按字符异或与防射加密函数联合的加密算法对文档进行加密形成密文,而后,用同样的算法配合密钥和密钥循环长度可以对密文进行解密。程序从命令行携带文件名(in)、操作方式(Op)、密钥(pwd)、加密钥循环使用长度(length)四个参数,其中pwd和length可以忽略,程序为忽略的情况提供了缺省值。若命令行带入的参数少于两个,即没有参数或只有第一个参数,程序提供了输入块对四个参数进行输入。4.2系统调用intmain(intargc,char*argv[])argc是外部命令参数的个数,argv[]存放各参数的内容.在运行程序以后,操作系统会自动将参数传给你。例如编译好的程序叫做program.exe你运行programab这个时候,argc=3argv[0]=programargv[1]=aargv[2]=bfopen(stringfilename,stringmode)fopen函数用来打开一个文件,其调用的一般形式为:文件指针名=fopen(文件名,使用文件方式);其中,“文件指针名”必须是被说明为FILE类型的指针变量;“文件名”是被打开文件的文件名;“使用文件方式”是指文件的类型和操作要求。“文件名”是字符串常量或字符串数组。文件使用方式意义:“rt”只读打开一个文本文件,只允许读数据“wt”只写打开或建立一个文本文件,只允许写数据“at”追加打开一个文本文件,并在文件末尾写数据“rb”只读打开一个二进制文件,只允许读数据“wb”只写打开或建立一个二进制文件,只允许写数据“ab”追加打开一个二进制文件,并在文件末尾写数据“rt+”读写打开一个文本文件,允许读和写“wt+”读写打开或建立一个文本文件,允许读写“at+”读写打开一个文本文件,允许读,或在文件末追加数据“rb+”读写打开一个二进制文件,允许读和写“wb+”读写打开或建立一个二进制文件,允许读和写“ab+”读写打开一个二进制文件,允许读,或在文件末追加数据-5-fputc(charch,FILE*fp)作用:把一个字符写到磁盘文件上去,即将字符ch输出到fp所指向的文件中去。返回值:成功,返回值就是输出的字符;失败,返回EOF(-1)。fgetc(FILE*fp)作用:从指定的文件读入一个字符,即从fp所指向的文件中读入一个字符。返回值:成功,返回值所得到的字符;失败,返回EOF(-1)。feof(FILE*fp)作用:检查文件是否结束。返回值:遇文件结束符返回非零值,否则返回0。-6-五、调试与测试1新建文件和程序2对文件进行加密加密后产生一个新的文件“anma”-7-3对文件进行解密运行后产生一个新的文件“mingma”-8-六、遇到的问题及解决方案1.linux系统下如何进行编程以及如何运行程序代码解决方法:通过网上百度以及从图书馆借阅的资料逐渐了解并认识Linux系统,从而进一步在Linux环境下进行程序设计2.在陌生环境下如何确保程序的正确性解决方案:先把在Linux系统下用GUNC编写的程序在vc++6.0环境下编译运行,确保程序可以进行调试,然后再移植到Linux环境中。七、程序源代码#includestdio.h#includestdlib.h#includestring.hvoidjiami(char*in,char*pwd,intlength);/*函数声明*/voidjiemi(char*in,char*pwd,intlength);/*函数声明*/intmain(intargc,char*argv[]){charin[30];/*需要加密或解密的文件名*/intlength;/*加密钥循环使用长度*/charpwd[8];/*加密钥*/charOp[10];/*操作方式*/if(argc3)/*如果从命令行带入的参数少于两个,刚提示输入*/{printf(YoumustenterfilenameandOperationmode!\n);printf(Inputfilename:\n);scanf(%s,in);printf(InputOperationmode:\n);scanf(%s,Op);printf(Enterpassword:\n);scanf(%s,pwd);printf(Inputlength:\n);scanf(%d,&length);}else{-9-if(argc==3)/*命令行带两个参数,后两个忽略,则给后两个参数提供缺省值pwd[]=00000000,length=8*/{strcpy(in,argv[1]);strcpy(Op,argv[2]);strcpy(pwd,00000000);length=8;}elseif(argc==4)/*若从命令行带入三个参数,刚对length提供缺值8*/{strcpy(in,argv[1]);strcpy(Op,argv[2]);strcpy(pwd,argv[3]);length=8;}else{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);/*调用加密*/elseif(strcmp(jiemi,Op)==0)jiemi(in,pwd,length);/*调用解密*/elseprintf(Inputerror!);}voidjiami(char*in,char*pwd,intlength)/*加密*/{FILE*fp1,*fp2;-10-charch;inta[99];intj=0;inti=0;fp1=fopen(in,rb);/*为输入打开一个二进制文件*/if(fp1==NULL){printf(Cannotopenin-file!\n);exit(1);}fp2=fopen(anma.txt,wb);/*为读写建立一个新的二进制文件*/if(fp2==NULL){printf(Cannotopenorcreateoutput-file!\n);exit(1);}ch=fgetc(fp1);while(!feof(fp1)){a[i]=ch-'a';//字符转换为数字a[i]=(11*a[i]+6)%26;//仿射加密函数ch=a[i]+'a';//数字转换为字符i++;fputc(ch^pwd[j=length-1?j=0:j++],fp2);/*按加密方法进行解密*/ch=fgetc(fp1);}fclose(fp1);remove(in);fclose(fp2);}voidjiemi(char*in,char*pwd,intlength)/*解密*/{FILE*fp1,*fp2;charch;intj=0;inti=0;-11-inta[99];fp1=fopen(in,rb);/*为输入打开一个二进制文件*/if(fp1==NULL){printf(Cannotopenin-file!\n);exit(1);}fp2=fopen(mingma.txt,
本文标题:操作系统文件加密系统课程设计报告
链接地址:https://www.777doc.com/doc-2381266 .html