C语言加密解密课程设计报告_第1页
C语言加密解密课程设计报告_第2页
C语言加密解密课程设计报告_第3页
C语言加密解密课程设计报告_第4页
C语言加密解密课程设计报告_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

大学课程设计大学课程设计文件的加密解密文件的加密解密单位数理系分院(系)专业应用物理学号学生姓名指导教师完成日期2010年9月

摘要进行程序的加密解密是现在对文件保护的一种重要措施。传统的文件保护方法只是对文件进行封存。随着计算机和网络技术的迅速发展,越来越多的人意识到文件加密的重要性,而采用一定的程序对文件进行加密正是现在人们对文件保护的一种必要手段。文件加密技术是通过相应程序对文件进行加密,它有许多优点,例如:可以对任意文本文档进行不同种类的加密,对原文件不造成破坏,同时可以将加密后的文件保存起来用于传输。程序灵活性强,可以随时进行加密解密。用户可以根据需要使程序完成相应功能。本文采用C程序,实现了所述功能中的全部内容。论文首先介绍了程序的设计思路,其中包括相应的流程图。其次,介绍了函数的主要功能。最后,利用C语言环境编辑程序实现了全部功能,并作了详细描述。关键词:文件加密,功能,文件,C程序。

目录TOC\o"1-3"\p""\h\z\u第1章选题的意义……………4文件加密的意义……………………4设计程序的意义…………………4第2章系统功能需求分析……………………52.1系统的基本要求…………………52.2功能设计…………5第3章系统设计………………6……………6…………7……………7…………11第4章系统实现………………7第5章总结……………………8

第1章选题的意义文件加密的意义随着科学的日益进步,电子技术越来越被人们所广泛使用。在此期间,自然就涉及到文件的传递。在此之前有关文件的转移都是人为进行转移,因此所谓的加密是物理意义上的加密。物理上的加密就是对文件封存,以至于文件内容不会泄露。但在这个网络的时代,文件的传递有着更加快捷的方式,就是通过互联网。这是种抽象的传输方式,文件不通过接触性交换,而是以数据的形式传送。在传递过程中,文件很容易被人截获,从而被他人得到了文件内容。如果不进行有效的保护措施,一旦发生这种情况,文件内容自然就没有保密可言,将会造成严重的损失。如果将原文件加密,虽然在传输过程中仍有被截获的可能,但窃取者可能无法阅读文件中的内容,从而间接的保护了文件。因此可以说,对文件的加密是极为重要的。本题目的内容是要对一个文件进行加密与解密。通过对程序的设计,可以对C程序中的数组·函数·分支·循环·文件等内容有更深入的理解与运用。设计程序的过程中,通过已有知识的运用和独立完成与思考,能够做到对知识的整体理解。通过解决设计过程中遇到的问题,能够提高设计程序的熟练度,并对知识有巩固作用。另外,所选题目与自己的兴趣有关。编程之中不仅能提高题目涉及到的内容的兴趣,更主要在于能够对C语言更加感兴趣。

第2章系统功能需求分析2.1系统的基本要求本题目的要求是通过程序,将已有文件进行加密解密。其中要求加密解密方式不止一种,也就是说,运行程序后,提供给使用者不同的选择。使用者根据自己的需要,选择相应的选项,就可以得到不同的结果。与此同时,也要将加密或解密后的程序予以保存。原文件和要保存的文件路径由使用着自己确定。设计的过程中要求设计者独立完成,程序设计思路清晰,报告画面整洁。2.2功能设计本程序要完成如下几项功能:的界面,界面自由设计,但必须包括不同加密解密方式的提示,以及提示使用者输入文件读入的路径和文件保存的路径。比如“请输入要读入文件的完整路径”“请输入要将加密后的文件保存的完整路径”“请选择加密方式”“ASCII码加密请按一”等等;2.根据使用者的选择,执行相应加密或解密函数,对文档加密或解密。这是程序的主要部分,程序中要编译许多函数以完成相应功能。加密方式包括ASCII码加密;倒叙加密;二进制加密。所以至少要完成三种加密函数,才能够完整的执行全部功能。3.将以加密的文件保存,并显示在屏幕上。这是程序的收尾工作。因为题目为文件的加密解密,所以自然要包括加密后对文件的保存。加密后的文件可以通过互联网传输,将加密后的文件以某种格式保存后,便于文件的传递。显示于屏幕上方便于使用者查看加密后的效果。打开保存的文件对比后,发现显示的内容与文件中的内容一致。即做到了文件的保存。

第3章系统设计1.程序中涉及到的全局变量:Intk为一全局变量,起其作用是用来存放用户对加密与解密方式的选择。2.程序中涉及到的自定义函数:Voidpassword1:ASCII码加密函数;Voidpass1:ASCII码解密函数;Voidpassword2:倒叙加密函数;Voidpass2:倒叙解密函数;Voidpassword3:二进制加密函数;Voidpass3:二进制解密函数;3.设计:(1)主函数:主函数完成的功能包括,提供给使用者选择界面,以及根据使用者的选择,执行不同功能。函数中首先要对自定义函数进行声明。运行该函数,显示出程序能够完成的加密与解密功能,并提供给使用者自行选择的空间。使用者根据提示,选择相应的功能后,通过选择语句,执行相应的函数,以完成使用者的要求。可以考虑在函数中定义整型变量k,该变量的作用是从键盘上读取一个数字,该数字为使用者选择程序要执行的功能选项。这样就可以编写一个switch选择语句,将不同的k值指向不同的自定义函数,以进一步完成相应的功能。(2)加密部分:该部分是程序中十分重要的一部分,对文件的加密过程要在此完成。该部分包括三种不同的自定义函数:Voidpassword1;voidpassword2;voidpassword3。即可完成三种不同的加密方法。执行该函数,将已有文件保存在一个数组中,通过对该数组元素的加密,实现对原文件中的内容的加密。再将加密后的结果显示在屏幕上,供使用者检查,并将加密后的内容保存在使用者指定的文件中。虽然有三个不同的函数,但主要思想是一样的。函数中要定义文件类型指针FILE*fp,*fp2.指针的作用是只想要打开的文件和要保存的地址,只有这样才能实现对文件的加密和保存。Chara[]:用以保存打开文件中的内容;charoutfile[],infile[]用以记录使用者选择打开文件和保存文件的路径。Inti:是对数组进行加密是定义的一个整型变量,他通过循环体,将数组中不同位置的元素进行改变。Intm:通过循环体,记录文件中包括的字符的总数,通过m,可将文件整体内容复制到数组a[]中。(3)解密部分:该部分是根据加密部分相应编辑出来的。这一部分同样由三种不同的自定义函数组成,可以想象到,三个函数与加密函数一一对应。运行解密函数之前,可以先运行相应的加密函数,将加密后的内容保存到某一文件中。然后运行解密函数,选择被打开的文件为刚加密的文件,这样可以发现,解密后的内容与原文件相同。Chara[]:用以保存打开文件中的内容;charoutfile[],infile[]用以记录使用者选择打开文件和保存文件的路径。Inti:是对数组进行加密是定义的一个整型变量,他通过循环体,将数组中不同位置的元素进行改变。Intm:通过循环体,记录文件中包括的字符的总数,通过m,可将文件整体内容复制到数组a[]中。3.2程序模块开始开始显示加密方式选择显示加密或解密结果结束保存结果图1功能模块组成系统分为三部分:显示加密或解密方式;显示加密或解密结果;保存结果。功能图主函数VVoidpassword3开始输入选择kK=1voidpassword1K=2Voidpassword2K=3k-4Voidpass1k=5Voidpass2K=6Voidpass3自定义函数voidpassword1开始开始打开文件i<strlen(a)-1i=0Ya[i]为英文字母a[i]-5为英文字母a[i]=a[i]-5a[i]=a[i]+21保存a[]输出a[]结束a[i]=a[i]YNYNNi=i+1Voidpassword2开始开始打开文件i=0,j=strlen(a)-1i<=(strlen()a-1)/2t=a[i],a[i]=a[j],a[j]=ti++,j--保存文件结束YN输出a[i]Voidpass1开始开始打开文件i<strlen(a)-1i=0Ya[i]为英文字母a[i]+5为英文字母a[i]=a[i]+5a[i]=a[i]-21保存a[]输出a[]结束a[i]=a[i]YNYNNi=i+1Voidpass2开始开始打开文件i=0,j=strlen(a)-1i<=(strlen()a-1)/2t=a[i],a[i]=a[j],a[j]=ti++,j--保存文件结束YN输出a[i]图4pass2函数算法3.4函数分析(1)主函数:voidmain()功能显示加密与解密方式选项,对使用者不同选择,对应执行相应的函数。内容分析Voidpassword;voidpass是对自定义函数的声明,其函数内容会在后面编译。Intk定义整型变量,记录使用者的选择。Printf()显示提示语句,提示使用者选择不同的数字会得到不同的结果。Switch(k)根据k值的不同,对应执行不同的函数。(2)voidpassword1()功能完成对已有文件的ASCII码加密,程序中设计的是用该字母前面的第5个字母代替。加密后字幕的相对差值没有改变,但每个字母都变为自身前面第5个字母。使他人无法阅读,实现了加密功能。内容分析Scanf()使用户输入原文件的位置。fp=fopen(infile,"r")打开相应的文件。While()用m记录文件共用多少个字符。Rewind()使文件指针从新指向文件开头。fgets(a,m,fp)将文件中的全部内容付给a[]数组。For()实现对数组a中的元素改变。 a[i]=a[i]-5,即用元素字母前面第5个字母代替当前字母Puts(a)在屏幕上显示出数组内容,即加密后的内容。Fputs(a,fc)将加密后的数组保存到fd所指向的文件中。Fclose()关闭文件。(3)voidpassword2()功能完成对以有文件的倒叙加密,即将文件中的内容全部倒置。加密后文件字母没有改变,但顺序改变,使人一时间无法识破,实现加密功能。内容分析Scanf()使用户输入原文件的位置。fp=fopen(infile,"r")打开相应的文件。While()用m记录文件共用多少个字符。Rewind()使文件指针从新指向文件开头。fgets(a,m,fp)将文件中的全部内容付给a[]数组。t=a[i];a[i]=a[j];a[j]=t;将文件最后一个字符付给第一个字符,将第一个字符付给最后一个字符。再将第二个与倒数第二个交换,以此类推。用for()实现循环。Puts(a)在屏幕上显示出数组内容,即加密后的内容。Fputs(a,fc)将加密后的数组保存到fd所指向的文件中。Fclose()关闭文件。(4)voidpassword3()功能完成对已有文件的二进制加密,将文件中的字母转换成数字不同字母(包括大小写)由不同数字代替,标点符号和间隔符也转换成相应的数字。其他人看到的加密后的文件只是很多的数字,根本无法阅读,实现了加密功能。内容分析Scanf()使用户输入原文件的位置。fp=fopen(infile,"r")打开相应的文件。While()用m记录文件共用多少个字符。Rewind()使文件指针从新指向文件开头。fgets(a,m,fp)将文件中的全部内容付给a[]数组。b=a[i]将数组a中的字符付给b。switch(b)根据b的值的不同,使c对应相应的数字。For()实现数组中全部字符的转换。d[i][]=c将c中的内容付给二维数组。Printf()显示二维数组中的内容。Fputs(a,fc)将加密后的数组保存到fd所指向的文件中。Fclose()关闭文件。(5)voidpass1()功能完成对已加密后的文件进行ASCII码解密。即用每个字符前的第5个字母代替该字母,还原加密后无法阅读的文件。是文件重新还原,供使用者阅读。内容分析Scanf()使用户输入原文件的位置。fp=fopen(infile,"r")打开相应的文件。While()用m记录文件共用多少个字符。Rewind()使文件指针从新指向文件开头。fgets(a,m,fp)将文件中的全部内容付给a[]数组。a[i]=a[i]+5将数组中的元素用自身后面第5个字母代替。Puts(a)在屏幕上显示出数组内容,即加密后的内容。Fputs(a,fc)将加密后的数组保存到fd所指向的文件中。Fclose()关闭文件。(6)voidpass2()功能使用该函数要想得到解密结果,只能对已加密的文件解密。它与加密函数voidpassword2作用相同,即将文件中倒数第j个字母与文件中正数第i个字母交换。实现解密功能。内容分析Scanf()使用户输入原文件的位置。fp=fopen(infile,"r")打开相应的文件。While()用m记录文件共用多少个字符。Rewind()使文件指针从新指向文件开头。fgets(a,m,fp)将文件中的全部内容付给a[]数组。t=a[i];a[i]=a[j];a[j]=t;将文件最后一个字符付给第一个字符,将第一个字符付给最后一个字符。再将第二个与倒数第二个交换,以此类推。用for()实现循环。Puts(a)在屏幕上显示出数组内容,即加密后的内容。Fputs(a,fc)将加密后的数组保存到fd所指向的文件中。Fclose()关闭文件。(7)voidpass3()功能该函数用以解密二进制加密后的文件。将文件中的数字通过选择语句还原回字符,是文件变得重新可读。实现了解密功能。内容分析Scanf()使用户输入原文件的位置。fp=fopen(infile,"r")打开相应的文件。fscanf(fp,"%d",&d[i][0])是文件中的数据付给二维数组d[i][]。n++用n记录文件中数据的长度。c=d[i][0]用for()循环将二维数组中的内容付给变量c。switch(c)通过选择语句,将不同的c值对应不同的字符。Printf()显示数组中的内容。Fputs(a,fc)将加密后的数组保存到fd所指向的文件中。Fclose()关闭文件。

第4章系统实现本系统针对信息维护、数据查询统计、报表打印分别设计了7个界面,下面举例说明一些功能界面的设计。3.1系统首页界面设计:建立一个表单做欢迎界面设计,在表单中添加一个标签,在其中输入所需文字。建立一个表单做登录界面设计,添加两个按钮,分别为确定和取消。如图1所示:图1图1图1图13.2添加学生信息建立一个表单做欢迎界面设计,在表单中添加一个标签,在其中输入所需文字。建立一个表单做登录界面设计,添加两个按钮,分别为确定和取消。如图1所示:图1图1图1图13.3维护学生信息

第5章总结通过课程设计,我学习到了许多内容。首先是对已学过的内容的一个深入理解。可以说,以前内容学的不好的话,是很难完成这项工作的。其次,在程序编译过程中,我遇到了许许多多的问题,这些问题大多数都是小问题,主要是对问题思考的不够全面的结果。但是在自己的反复检查,实验,以及老师的帮助下,这些问题都迎刃而解。在解决问题的过程中,我能够了解到我设计中的不足之处。刚开始的时候,面对一张空空的程序编辑界面,一时之间还真没有头绪。但随着思维的跟进,我将程序分为几部分处理,用不同的函数实现不同的功能。这样就将难点分散开来,逐一实现了加密与解密功能。程序设计中没遇到问题后,就要停下来仔细分析问题出处,及时修改。这就不免使设计过程变得有些乏味。这也正是设计程序的另一个目的,他在你设计过程中不经意地考验了你的耐心和恒心。只有能够坚持到最后的人才能够设计出出色的程序。程序编辑过程中,我也深深的感觉到了自己的不足,对已学过的知识是有所理解,也能够合理地运用,但对边角的内容有所忽略,这也正是有时程序无法正常运行时不知错在哪的原因。因此这让我懂得了,学习过程要仔细认真。最后,经过许多天的设计过程,我终于完成了程序的全部内容过程。经过调试后,程序已经能够正常运行,并能实现全部功能。看到这么多天的成果,我感到一种成就感。程序设计让我将以学过的知识综合运用,我感觉编译这种程序确实很有意思。因为它不仅考察一个人知识的掌握情况,也也考验遇到问题的分析能力,和自身的学习能力。所以我感觉课程设计很有用。

附录源程序代码#include<stdio.h>#include<string.h>#include<stdlib.h>intmain(){ voidpassword1(); voidpassword2(); voidpass1(); voidpass2(); voidpassword3(); voidpass3(); intk;loop:printf("选择加密解密方式\n"); printf("(加密1:ASCII加密)请按1\n"); printf("(加密2:倒序加密)请按2\n"); printf("(加密3:二进制法加密)请按3\n"); printf("(解密1:ASCII解密)请按4\n"); printf("(解密2:倒序解密)请按5\n"); printf("(解密3:二进制法解密)请按6\n"); scanf("%d",&k); switch(k) { case1:password1();break; case2:password2();break; case3:password3();break; case4:pass1();break; case5:pass2();break; case6:pass3();break; default:printf("错误,无法加密惑解密\n"); } gotoloop;}voidpassword1(){ FILE*fp; chara[10000],infile[100],ch;intm=0; charoutfile[100];inti; FILE*fc; printf("输入读入文件的名字:\n");scanf("%s",infile);if((fp=fopen(infile,"r"))==NULL){ printf("文件无法打开!\n"); exit(0);}while(!feof(fp)){ ch=fgetc(fp);m++; }rewind(fp);fgets(a,m,fp);a[m]='\0';printf("输入输出文件的名字:\n");scanf("%s",outfile);if((fc=fopen(outfile,"w"))==NULL) { printf("文件无法打开!\n");exit(0); }for(i=0;i<=strlen(a)-1;i++){ if(a[i]>=65&&a[i]<=90||a[i]<=122&&a[i]>=97) { if((a[i]-5)<65||(a[i]-5)<97&&a[i]-5>=91) a[i]=a[i]+21; elsea[i]=a[i]-5; } elsea[i]=a[i];}printf("结果为:\n");puts(a);fputs(a,fc);fclose(fp);fclose(fc);printf("\n");}voidpassword2(){ FILE*fp; chara[10000],infile[100],ch,t;intm=0; charoutfile[100];inti,j; FILE*fc; printf("输入读入文件的名字:\n");scanf("%s",infile);if((fp=fopen(infile,"r"))==NULL){ printf("文件无法打开!\n"); exit(0);}while(!feof(fp)){ ch=fgetc(fp);m++; }rewind(fp);fgets(a,m,fp);a[m]='\0';printf("输入输出文件的名字:\n");scanf("%s",outfile);if((fc=fopen(outfile,"w"))==NULL) { printf("文件无法打开!\n");exit(0); }for(i=0,j=(strlen(a)-1);i<=(strlen(a)-1)/2;i++,j--){ t=a[i]; a[i]=a[j]; a[j]=t;}printf("结果为:\n");puts(a);fputs(a,fc);fclose(fp);fclose(fc);printf("\n");}voidpass1(){ FILE*fp; chara[10000],infile[100],ch;intm=0; charoutfile[100];inti; FILE*fc; printf("输入读入文件的名字:\n");scanf("%s",infile);if((fp=fopen(infile,"r"))==NULL){ printf("文件无法打开!\n"); exit(0);}while(!feof(fp)){ ch=fgetc(fp);m++; }rewind(fp);fgets(a,m,fp);a[m]='\0';printf("输入输出文件的名字:\n");scanf("%s",outfile);if((fc=fopen(outfile,"w"))==NULL) { printf("文件无法打开!\n");exit(0); }for(i=0;i<=strlen(a)-1;i++){ if(a[i]>=65&&a[i]<=90||a[i]<=122&&a[i]>=97){ if(a[i]+5<97&&a[i]+5>90||(a[i]+5)>122)a[i]=a[i]-21; elsea[i]=a[i]+5;}elsea[i]=a[i];}printf("结果为:\n");puts(a);fputs(a,fc);fclose(fp);fclose(fc);printf("\n");}voidpass2(){ FILE*fp; chara[10000],infile[100],ch,t;intm=0; charoutfile[100];inti,j; FILE*fc; printf("输入读入文件的名字:\n");scanf("%s",infile);if((fp=fopen(infile,"r"))==NULL){ printf("文件无法打开!\n"); exit(0);}while(!feof(fp)){ ch=fgetc(fp);m++; }rewind(fp);fgets(a,m,fp);a[m]='\0';printf("输入输出文件的名字:\n");scanf("%s",outfile);if((fc=fopen(outfile,"w"))==NULL) { printf("文件无法打开!\n");exit(0); }for(i=0,j=(strlen(a)-1);i<=(strlen(a)-1)/2;i++,j--){ t=a[i]; a[i]=a[j]; a[j]=t;}printf("结果为:\n");puts(a);fputs(a,fc);fclose(fp);fclose(fc);printf("\n");}voidpassword3(){ FILE*fp; chara[10000],infile[100],ch,b;intm=0,c,d[10000][1]; charoutfile[100];inti; FILE*fc; printf("输入读入文件的名字:\n");scanf("%s",infile);if((fp=fopen(infile,"rb"))==NULL){ printf("文件无法打开!\n"); exit(0);}while(!feof(fp)){ ch=fgetc(fp);m++; }rewind(fp);fgets(a,m,fp);a[m]='\0';printf("输入输出文件的名字:\n");scanf("%s",outfile);if((fc=fopen(outfile,"wb"))==NULL) { printf("文件无法打开!\n");exit(0); } for(i=0;a[i]!='\0';i++) { b=a[i]; switch(b) { case'a':c=1;break; case'b':c=2;break; case'c':c=3;break; case'd':c=4;break; case'e':c=5;break; case'f':c=6;break; case'g':c=7;break; case'h':c=8;break; case'i':c=9;break; case'j':c=10;break; case'k':c=11;break; case'l':c=12;break; case'm':c=13;break; case'n':c=14;break; case'o':c=15;break; case'p':c=16;break; case'q':c=17;break; case'r':c=18;break; case's':c=19;break; case't':c=20;break; case'u':c=21;break; case'v':c=22;break; case'w':c=23;break; case'x':c=24;break; case'y':c=25;break; case'z':c=26;break; case'A':c=27;break; case'B':c=28;break; case'C':c=29;break; case'D':c=30;break; case'E':c=31;break; case'F':c=32;break; case'G':c=33;break; case'H':c=34;break; case'I':c=35;break; case'J':c=36;break; case'K':c=37;break; case'L':c=38;break; case'M':c=39;break; case'N':c=40;break; case'O':c=41;break; case'P':c=42;break; case'Q':c=43;break; case'R':c=44;break; case'S':c=45;break; case'T':c=46;break; case'U':c=47;break; case'V':c=48;break; case'W':c=49;break; case'X':c=50;break; case'Y':c=51;break; case'Z':c=52;break; case'?':c=53;break; case',':c=54;break; case'.':c=55;break; case'!':c=56;break; default:c=57;break; } d[i][0]=c; } d[i][0]=0; printf("结果为:\n"); for(i=0;d[i][0]!='\0';i++) printf("%d",d[i][0]); for(i=0;d[i][0]!='\0';i++) fprintf(fc,"%d",d[i][0]); fclose(fp);fclose(fc);printf("\n");}voidpass3(){FILE*fp;chara[10000],infile[100],b;intm=0,n,c,d[10000][1];charoutfile[100];inti;FILE*fc;printf("输入读入文件的名字:\n");scanf("%s",infile);if((fp=fopen(infile,"rb"))==NULL) {printf("文件无法打开!\n");exit(0); } i=0; n=0;while(!feof(fp)) {fscanf(fp,"%d",&d[i][0]); i++; n++; }printf("输入输出文件的名字:\n");scanf("%s",outfile);if((fc=fopen(outfile,"wb"))==NULL){printf("文件无法打开!\n");exit(0);}for(i=0;i<n;i++){c=d[i][0];switch(c){case1:b='a'

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论