操作系统文件加密系统课程设计报告.docx

上传人:b****8 文档编号:30626280 上传时间:2023-08-18 格式:DOCX 页数:15 大小:207.65KB
下载 相关 举报
操作系统文件加密系统课程设计报告.docx_第1页
第1页 / 共15页
操作系统文件加密系统课程设计报告.docx_第2页
第2页 / 共15页
操作系统文件加密系统课程设计报告.docx_第3页
第3页 / 共15页
操作系统文件加密系统课程设计报告.docx_第4页
第4页 / 共15页
操作系统文件加密系统课程设计报告.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

操作系统文件加密系统课程设计报告.docx

《操作系统文件加密系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《操作系统文件加密系统课程设计报告.docx(15页珍藏版)》请在冰豆网上搜索。

操作系统文件加密系统课程设计报告.docx

操作系统文件加密系统课程设计报告

 

河南城建学院

《操作系统原理》课程设计报告书

 

班级:

0834131

专业:

信息管理与信息系统(本科)

课程名称:

操作系统原理

指导教师:

魏新红

设计题目:

文件加密储存

学号:

姓名:

同组人员:

 

计算机科学与工程学院

2015年12月

前言

随着网络技术的不断发展,人们的个人信息、网络间的文件传递、电子商务等方面都需要大力的保护,文件加密技术也就随之产生。

文件的加密主要是由加密算法实现,加密算法有多种,本程序设计对文件的加密使用的是最基础的异或加密算法与防射函数加密算法共同对文件进行双层加密。

加密技术是电子商务采取的主要安全保密措施,是最常用的安全保密手段,利用技术手段把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原(解密)。

加密技术包括两个元素:

算法和密钥。

算法是将普通的文本(或者可以理解的信息)与一窜数字(密钥)的结合,产生不可理解的密文的步骤,密钥是用来对数据进行编码和解码的一种算法。

在安全保密中,可通过适当的密钥加密技术和管理机制来保证网络的信息通讯安全.

C语言具有简单、安全、可移植、面向对象、健壮、多线程、体系结构中立、解释执行、高性能、分布式和动态等主要特点。

本程序充分利用C语言的特点,针对当下社会比较重视的文件加密,设计了本程序。

使用本程序可以对txt,word等多种文件进行加密解密,使用便捷实用,功能完善,满足了用户对文件安全性的需求。

 

 

一、系统环境

Windows平台下安装VMware虚拟机来搭建Linux平台,操作系统环境是RedHatLinux9,语言开发环境是Linux的GNUC或C++。

硬件环境:

计算机一台,局域网环境

软件环境:

虚拟机下的RedHatLinux9

2、设计目的

学习计算机软件技术,特别是计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。

如何学习和掌握操作系统技术的原理与实际技巧呢?

除了听课和读书之外,最好的方法恐怕就是在实践中练习。

例如,自己设计一个小型操作系统,多使用操作系统,多阅读和分析操作源代码等。

但由于我们的条件和学时有限,在理论学习过程中没有给同学们提供更多的实验机会。

本操作系统课程设计,是给同学们提供一个集中实验的机会。

本次课程设计文件加密存储要实现以下要求:

(1)利用文件系统的系统调用编程对文件的内容进行加、解密;

(2)要求程序从环境的命令行携带4个参数。

第一个是文件名,第二个是操作方式,第三个是密钥,第四个是加密钥循环使用长度。

其中后两个参数是可以忽略,但对忽略的情况要提供缺省值;

(3)要求最后实现对文件的加密转储,或通过改道的办法进行转储。

对于已加密的文件可以进行解密显示或解密后转储。

形成加密或解密文件后要删除原来的文件;

(4)建议加密过程使用按字符进行异或的方式处理,也可以是仿射加密方式,比如把所有的字符做一个平移变换:

A-A+C(A为任意字母表中的字母,C为常数,为了防止越界或溢出,可以改造其为A-(A+C)MOD256),这里要提醒的是,要注意逆变换;

(5)设计者也可以提供自己的加密方式。

 

三、总体设计

实现对文件的加密与解密,要求有图形用户界面。

细则如下

1.能够对一个文件进行加密;

2.加密后生成一个新文件为“anma””,并删除源文件;

3.能将加密生成的文件还原成原文件名为“mingma”。

 

NN

NN

 

NN

 

N

 

NN

N

 

四、详细设计

4.1加密算法

本设计采用按字符异或与防射加密函数联合的加密算法对文档进行加密形成密文,而后,用同样的算法配合密钥和密钥循环长度可以对密文进行解密。

程序从命令行携带文件名(in)、操作方式(Op)、密钥(pwd)、加密钥循环使用长度(length)四个参数,其中pwd和length可以忽略,程序为忽略的情况提供了缺省值。

若命令行带入的参数少于两个,即没有参数或只有第一个参数,程序提供了输入块对四个参数进行输入。

4.2系统调用

intmain(intargc,char*argv[])

argc是外部命令参数的个数,argv[]存放各参数的内容.在运行程序以后,操作系统会自动将参数传给你。

例如编译好的程序叫做program.exe你运行programab这个时候,argc=3argv[0]="program"argv[1]="a"argv[2]="b"

fopen(stringfilename,stringmode)

fopen函数用来打开一个文件,其调用的一般形式为:

文件指针名=fopen(文件名,使用文件方式);其中,“文件指针名”必须是被说明为FILE类型的指针变量;“文件名”是被打开文件的文件名;“使用文件方式”是指文件的类型和操作要求。

“文件名”是字符串常量或字符串数组。

文件使用方式意义:

“rt”只读打开一个文本文件,只允许读数据

“wt”只写打开或建立一个文本文件,只允许写数据

“at”追加打开一个文本文件,并在文件末尾写数据

“rb”只读打开一个二进制文件,只允许读数据

“wb”只写打开或建立一个二进制文件,只允许写数据

“ab”追加打开一个二进制文件,并在文件末尾写数据

“rt+”读写打开一个文本文件,允许读和写

“wt+”读写打开或建立一个文本文件,允许读写

“at+”读写打开一个文本文件,允许读,或在文件末追加数据

“rb+”读写打开一个二进制文件,允许读和写

“wb+”读写打开或建立一个二进制文件,允许读和写

“ab+”读写打开一个二进制文件,允许读,或在文件末追加数据

fputc(charch,FILE*fp)

作用:

把一个字符写到磁盘文件上去,即将字符ch输出到fp所指向的文件中去。

返回值:

成功,返回值就是输出的字符;

失败,返回EOF(-1)。

fgetc(FILE*fp)

作用:

从指定的文件读入一个字符,即从fp所指向的文件中读入一个字符。

返回值:

成功,返回值所得到的字符;

失败,返回EOF(-1)。

feof(FILE*fp)

作用:

检查文件是否结束。

返回值:

遇文件结束符返回非零值,否则返回0。

 

五、调试与测试

1新建文件和程序

2对文件进行加密

加密后产生一个新的文件“anma”

3对文件进行解密

运行后产生一个新的文件“mingma”

 

 

六、遇到的问题及解决方案

1.linux系统下如何进行编程以及如何运行程序代码

解决方法:

通过网上XX以及从图书馆借阅的资料逐渐了解并认识Linux系统,从而进一步在Linux环境下进行程序设计

2.在陌生环境下如何确保程序的正确性

解决方案:

先把在Linux系统下用GUNC编写的程序在vc++6.0环境下编译运行,确保程序可以进行调试,然后再移植到Linux环境中。

七、程序源代码

#include

#include

#include

voidjiami(char*in,char*pwd,intlength);/*函数声明*/

voidjiemi(char*in,char*pwd,intlength);/*函数声明*/

intmain(intargc,char*argv[])

{

charin[30];/*需要加密或解密的文件名*/

intlength;/*加密钥循环使用长度*/

charpwd[8];/*加密钥*/

charOp[10];/*操作方式*/

if(argc<3)/*如果从命令行带入的参数少于两个,刚提示输入*/

{

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

{

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);/*调用解密*/

else

printf("Inputerror!

");

}

voidjiami(char*in,char*pwd,intlength)/*加密*/

{

FILE*fp1,*fp2;

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;

inta[99];

fp1=fopen(in,"rb");/*为输入打开一个二进制文件*/

if(fp1==NULL)

{

printf("Cannotopenin-file!

\n");

exit

(1);

}

fp2=fopen("mingma.txt","wb");/*为读写建立一个新的二进制文件*/

if(fp2==NULL)

{

printf("Cannotopenorcreateoutput-file!

\n");

exit

(1);

}

ch=fgetc(fp1);

while(!

feof(fp1))

{

ch=ch^pwd[j>=length-1?

j=0:

j++];

a[i]=ch-'a';//字符转换为数字

a[i]=(19*a[i]+16)%26;//仿射解密函数

ch=a[i]+'a';//数字转换为字符

i++;

fputc(ch,fp2);

ch=fgetc(fp1);

}

fclose(fp1);

remove(in);

fclose(fp2);

}

 

心得体会

通过此次课程设计,使我更加扎实的掌握了有关C方面的知识与Linux下C编程的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。

实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。

过而能改,善莫大焉。

在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。

最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。

这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后不断实验和查找资料后,终于游逆而解。

在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!

这次课程,给我很多专业知识以及专业技能上的提升,同时,设计让我感触很深。

使我对抽象的理论有了具体的认识。

通过这次课程设计,我掌握了Linux下C的编程方法和测试;熟悉了Linux的编程环境以及相关工具的使用。

我认为,在这次的课程设计中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。

更重要的是,在实验课上,我们学会了很多学习的方法。

而这是日后最实用的,真的是受益匪浅。

要面对社会的挑战,只有不断的学习、实践,再学习、再实践。

这对于我们的将来也有很大的帮助。

以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。

就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟,会面对需要面对的事情。

回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。

此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。

参考文献

1、黄丽娜,管佩森,陈彩可.RedHATlINUX9.0基础教程.清华大学出版社,2004.4

2、潘景昌,刘杰.操作系统实验教程.清华大学出版社,2010.11

3、汤小丹,梁红兵,哲凤屏,汤子瀛.计算机操作系统.西安电子科技大学,2014.5

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1