文件的加密解密第1页共26页单位数理系分院(系)专业应用物理学号学生姓名指导教师完成日期2010年9月17日大学课程设计文件的加密解密文件的加密解密第2页共26页摘要进行程序的加密解密是现在对文件保护的一种重要措施。传统的文件保护方法只是对文件进行封存。随着计算机和网络技术的迅速发展,越来越多的人意识到文件加密的重要性,而采用一定的程序对文件进行加密正是现在人们对文件保护的一种必要手段。文件加密技术是通过相应程序对文件进行加密,它有许多优点,例如:可以对任意文本文档进行不同种类的加密,对原文件不造成破坏,同时可以将加密后的文件保存起来用于传输。程序灵活性强,可以随时进行加密解密。用户可以根据需要使程序完成相应功能。本文采用C程序,实现了所述功能中的全部内容。论文首先介绍了程序的设计思路,其中包括相应的流程图。其次,介绍了函数的主要功能。最后,利用C语言环境编辑程序实现了全部功能,并作了详细描述。关键词:文件加密,功能,文件,C程序。文件的加密解密第3页共26页目录第1章选题的意义……………………………………………………………………………41.1文件加密的意义……………………………………………………………………41.2设计程序的意义…………………………………………………………………错误!未定义书签。第2章系统功能需求分析……………………………………………………………………52.1系统的基本要求…………………………………………………………………52.2功能设计…………………………………………………………………………5第3章系统设计………………………………………………………………………………63.1设计思路……………………………………………………………………………63.2程序模块…………………………………………………………………………73.3功能图……………………………………………………………………………73.4函数分析…………………………………………………………………………11第4章系统实现………………………………………………………………………………16第5章总结……………………………………………………………………………………18文件的加密解密第4页共26页第1章选题的意义1.1文件加密的意义随着科学的日益进步,电子技术越来越被人们所广泛使用。在此期间,自然就涉及到文件的传递。在此之前有关文件的转移都是人为进行转移,因此所谓的加密是物理意义上的加密。物理上的加密就是对文件封存,以至于文件内容不会泄露。但在这个网络的时代,文件的传递有着更加快捷的方式,就是通过互联网。这是种抽象的传输方式,文件不通过接触性交换,而是以数据的形式传送。在传递过程中,文件很容易被人截获,从而被他人得到了文件内容。如果不进行有效的保护措施,一旦发生这种情况,文件内容自然就没有保密可言,将会造成严重的损失。如果将原文件加密,虽然在传输过程中仍有被截获的可能,但窃取者可能无法阅读文件中的内容,从而间接的保护了文件。因此可以说,对文件的加密是极为重要的。1.2设计程序的意义本题目的内容是要对一个文件进行加密与解密。通过对程序的设计,可以对C程序中的数组·函数·分支·循环·文件等内容有更深入的理解与运用。设计程序的过程中,通过已有知识的运用和独立完成与思考,能够做到对知识的整体理解。通过解决设计过程中遇到的问题,能够提高设计程序的熟练度,并对知识有巩固作用。另外,所选题目与自己的兴趣有关。编程之中不仅能提高题目涉及到的内容的兴趣,更主要在于能够对C语言更加感兴趣。文件的加密解密第5页共26页第2章系统功能需求分析2.1系统的基本要求本题目的要求是通过程序,将已有文件进行加密解密。其中要求加密解密方式不止一种,也就是说,运行程序后,提供给使用者不同的选择。使用者根据自己的需要,选择相应的选项,就可以得到不同的结果。与此同时,也要将加密或解密后的程序予以保存。原文件和要保存的文件路径由使用着自己确定。设计的过程中要求设计者独立完成,程序设计思路清晰,报告画面整洁。2.2功能设计本程序要完成如下几项功能:1.提供给使用者选择加密与解密的方式的界面,界面自由设计,但必须包括不同加密解密方式的提示,以及提示使用者输入文件读入的路径和文件保存的路径。比如“请输入要读入文件的完整路径”“请输入要将加密后的文件保存的完整路径”“请选择加密方式”“ASCII码加密请按一”等等;2.根据使用者的选择,执行相应加密或解密函数,对文档加密或解密。这是程序的主要部分,程序中要编译许多函数以完成相应功能。加密方式包括ASCII码加密;倒叙加密;二进制加密。所以至少要完成三种加密函数,才能够完整的执行全部功能。3.将以加密的文件保存,并显示在屏幕上。这是程序的收尾工作。因为题目为文件的加密解密,所以自然要包括加密后对文件的保存。加密后的文件可以通过互联网传输,将加密后的文件以某种格式保存后,便于文件的传递。显示于屏幕上方便于使用者查看加密后的效果。打开保存的文件对比后,发现显示的内容与文件中的内容一致。即做到了文件的保存。文件的加密解密第6页共26页第3章系统设计3.1设计思路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:通过循环体,记录文件中包括的字符文件的加密解密第7页共26页的总数,通过m,可将文件整体内容复制到数组a[]中。(3)解密部分:该部分是根据加密部分相应编辑出来的。这一部分同样由三种不同的自定义函数组成,可以想象到,三个函数与加密函数一一对应。运行解密函数之前,可以先运行相应的加密函数,将加密后的内容保存到某一文件中。然后运行解密函数,选择被打开的文件为刚加密的文件,这样可以发现,解密后的内容与原文件相同。Chara[]:用以保存打开文件中的内容;charoutfile[],infile[]用以记录使用者选择打开文件和保存文件的路径。Inti:是对数组进行加密是定义的一个整型变量,他通过循环体,将数组中不同位置的元素进行改变。Intm:通过循环体,记录文件中包括的字符的总数,通过m,可将文件整体内容复制到数组a[]中。3.2程序模块系统分为三部分:显示加密或解密方式;显示加密或解密结果;保存结果。3.3功能图主函数开始显示加密方式选择显示加密或解密结果结束保存结果图1功能模块组成文件的加密解密第8页共26页自定义函数voidpassword1Voidpassword3开始输入选择kK=1voidpassword1K=2Voidpassword2K=3k-4Voidpass1k=5Voidpass2K=6Voidpass3文件的加密解密第9页共26页Voidpassword2开始打开文件istrlen(a)-1i=0Ya[i]为英文字母a[i]-5为英文字母a[i]=a[i]-5a[i]=a[i]+21保存a[]输出a[]结束a[i]=a[i]YNYNNi=i+1文件的加密解密第10页共26页Voidpass1开始打开文件i=0,j=strlen(a)-1i=(strlen()a-1)/2t=a[i],a[i]=a[j],a[j]=ti++,j--保存文件结束YN输出a[i]文件的加密解密第11页共26页开始打开文件istrlen(a)-1i=0Ya[i]为英文字母a[i]+5为英文字母a[i]=a[i]+5a[i]=a[i]-21保存a[]输出a[]结束a[i]=a[i]YNYNNi=i+1文件的加密解密第12页共26页Voidpass23.4函数分析(1)主函数:voidmain()功能开始打开文件i=0,j=strlen(a)-1i=(strlen()a-1)/2t=a[i],a[i]=a[j],a[j]=ti++,j--保存文件结束YN输出a[i]图4pass2函数算法文件的加密解密第13页共26页显示加密与解密方式选项,对使用者不同选择,对应执行相应的函数。内容分析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()实现循环。文件的加密解密第14页共26页Puts(a)在屏幕上显示出数组内容,即加密后的内容。Fputs(a,fc)将加密后的数组保存到fd所指向的文件中。Fclose()关闭文件。(4)voidpassword3()功能完成对已有文件的二进制加密,将文件中的字母转换成数字不同字母(