当前位置:文档之家› 文件加密与解密实验报告

文件加密与解密实验报告

HUNAN UNIVERSITY程序设计训练——文件加密与解密报告学生姓名X X X学生学号20110102308专业班级建环308指导老师何英2012-07-01至 2012-07-13一、程序设计目的和要求 (3)二、程序设计内容 (4)1、总体设计 (4)1.1主控选择模块 (4)1.2加密模块 (4)1.3解密模块 (4)2、流程图 (5)三模块详细说明 (6)四、测试数据及其结果 (7)五、课程设计总结 (8)六、附录 (9)附录1:参考文献 (9)附录2:程序源代码 (9)一、程序设计目的和要求1、目的:为保证个人数据资料不被他人窃取使用,保护个人隐私及个人文件。

设计一个基于c语言的文本文件加密及解密软件,可以方便对文本文件的加密与解密。

本设计实现了文本文件的解密及解密,运行软件之后只需输入任意一个文本文件的文件名及后缀名即可对该文本文件进行加密或解密操作。

本设计的加密与解密系统,使用了面向各类文件的方法,运用Microsoft Visual C++ 6.0实现具有加密、解密、帮助信息、读取文本文件、显示结果、退出等功能的文件加密与解密系统。

2、要求:(1)从键盘输入要进行加密的一行字符串或者需要加密的文件名。

(2)显示菜单:(3)选择菜单,进行相应的操作。

加密方法是设置一加密字符串以及对文件的哪些部分进行加密;加密是将原始文件加密并保存到文件中;解密是将加了密的文件还原并保存到文件中,同时应比较与原始文件的一致性;3、其他要求(1)变量、函数命名符合规范。

(2)注释详细:每个变量都要求有注释说明用途;函数有注释说明功能,对参数、返回值也要以注释的形式说明用途;关键的语句段要求有注释解释。

二、程序设计内容1、总体设计本程序主要是对已知文件通过修改文件内容以达到文件加密的目的。

整个系统由以下几大功能模块组成。

1.1主控选择模块此模块是主程序操作界面,供用户进行选择。

用户可选择执行加密或解密操作。

1.2加密模块加密模块主要是完成对文件的加密操作。

从外部文件中读入任意一个文件并将它加密并显示出来!1.3解密模块解密模块是完成对文件的解密工作,将密文转换为可被识别的明文。

从外部文件中读入任意一个文件并将它解密并显示出来!2、流程图三模块详细说明'加密与解密函数说明:' CharSting 加密或解密的数据' Key 加密或解密的密钥'函数返回值:' 1. CharString为空时返回"1"' 2. 加密或解密失败返回"0"' 3. 成功则返回加密或解密后的字符串Public Function EDcode$(CharString As String, Key As Integer) Dim X As Single, i As LongDim CharNum As Integer, RandomInteger As IntegerDim CharSingle As String * 1On Local Error GoTo EDcodeErrorEDcode$ = ""If Len(CharString) = 0 ThenEDcode$ = "1"Exit FunctionEnd IfX = Rnd(-Key)For i = 1 To Len(CharString)CharSingle = Mid$(CharString, i, 1)CharNum = Asc(CharSingle)RandomInteger = Int(256 * Rnd) And &H7FCharNum = CharNum Xor RandomIntegerCharSingle = Chr$(CharNum)EDcode$ = EDcode$ + CharSingleNext iExit FunctionEDcodeError:EDcode$ = "0"End Function四、测试数据及其结果测试数据记录:文件加密的初始界面按1选项后再次确定后输入密码后即完成加密解密过程类似五、课程设计总结在这个编程中,如果在设计时存在逻辑错误,虽然源代码没错,不过在运行时就有问题,在调试中前后函数的功能要对应,要不然就不能正确运行,还有一些基本的符合不符合规范,注意英文字母大小的书写。

通过这个C语言程序的编写,我遇到了许多问题,如:有些源代码的运用不是很清楚,这个加密解密处理文件比较大,处理起来比较麻烦,不过通过查阅资料,在草稿纸上进行算法的书写,终于把它搞定,让我明白坚持的力量,更重要的是怎么学习,要懂得不懂就要问,懂得吃苦了,比如我在调试的过程中就遇到了许多问题,不过我一个个的,慢慢的进行下去,这是我收获最大的,学C语言要多练才能编号程序。

六、附录附录1:参考文献1.谭浩强 C语言程序设计(第二版)北京:高等教育出版社,2002 2.谭浩强 C语言程序设计清华大学出版社3.徐士良等. C语言常用算法程序集清华大学出版社4.黄明等. 21世纪进阶辅导 C语言程序设计.大连理工大学出版社,20055.马靖善等. C语言程序设计.清华大学出版社,20056. 张毅坤等. C语言程序设计教程[M] .西安交通大学出版社,20037.张龙祥等. 面向对象程序设计[M].北京:人民邮电出版社,20018. 李丽娟 C/C++语言程序设计教程—从模块化到面向对象(第三版)附录2:程序源代码#include<stdio.h>#include<stdlib.h>#include <conio.h>//getche()需要#include<string.h>char ch;//异或函数int YiHuo(FILE *f0,FILE *fp,int passwordnum,int move,char key){while(fread(&ch,1,1,f0),!feof(f0)){if (key==49)//加密{ch=ch+move;(char)(ch^=passwordnum);fwrite(&ch,1,1,fp);}if (key==50)//解密{(char)(ch^=passwordnum);ch=ch+move;fwrite(&ch,1,1,fp);}}}int main(){//encrypt加密decrypt解密FILE *f0,*fe,*fd;char fname0[50];char efname[50]={0};char dfname[50]={0};char Password[50]={0},key=0,key2=0;char sysfname[20]={0};int p=0,passwordnum,move=0;//异或后移动的次数;system("cls");do{system("cls");do{printf("1-----------加密文件\n");printf("2-----------解密文件\n");printf("Esc----------退出\n") ;key=getch();//读入一个键盘码}while ((key!='1')&&(key!='2')&&(key!=27));Password[50]=0;passwordnum=0;if (key==49){system("cls");printf("请输入要加密的文件路径\n");scanf("%s",fname0);// while(key=0)//打开原文件if ((f0=fopen(fname0,"rb"))==NULL){printf("文件无法打开!\n");key=0;//文件打开失败时key的值改变exit(0);printf("加密失败\n");system("pause");}//只有文件fname0打开成功时才能继续打开efname if(key==49){system("cls");printf("请输入完成加密的文件存储路径\n");scanf("%s",efname);if ((fe=fopen(efname,"w+"))==NULL){printf("文件无法打开!\n");printf("加密失败\n");fclose(f0);system("pause");exit(0);key=0;}}//如果打开文件成功则开始输入密码if(key==49){system("cls");printf("请输入密码\n");scanf("%s",Password);//把字符密码转化为整形来异或for(p=0;Password[p]!=0;p++)passwordnum+=((int)Password[p]);move=(int)(passwordnum%9);while (move>9)move=(int)(move%9);}if (key==49){//异或加密system("cls");YiHuo(f0,fe,passwordnum,move,key);printf("\n加密成功,您的输出文件路径为:\n");printf("%s",efname);fclose(f0);fclose(fe);}}if (key==50){system("cls");printf("请输入要解密的文件路径\n");scanf("%s",fname0);// while(key=0)//打开原文件if ((f0=fopen(fname0,"rb"))==NULL){printf("文件无法打开!\n");key=0;//文件打开失败时key的值改变exit(0);printf("解密失败\n");system("pause");}//只有文件fname0打开成功时才能继续打开dfname if(key==50){system("cls");printf("请输入完成解密的文件存储路径\n");scanf("%s",dfname);if ((fd=fopen(dfname,"w+"))==NULL){printf("解密失败");fclose(f0);system("pause");printf("文件无法打开!\n");exit(0);key=0;}}//如果打开文件成功则开始输入密码if(key==50){system("cls");printf("请输入密码\n");scanf("%s",Password);//把字符密码转化为整形来异或for(p=0;Password[p]!=0;p++)passwordnum+=((int)Password[p]);move=(int)(passwordnum%9);while (move>9)move=(int)(move%9);move=(-move);}if (key==50){//异或加密system("cls");YiHuo(f0,fd,passwordnum,move,key);printf("\n解密成功,您的输出文件路径为:\n%s",dfname);system("pause");fclose(f0);fclose(fd);}}}while(key!=27);//当key为0,即读写两个文件都打开成功时才结束循环return 0;printf("\n谢谢使用! \n"); system("pause");。

相关主题