程序设计训练
——文件加密与解密
报 告
学生姓名 X X X 学生学号 20110102308 专业班级 指导老师
2012-07-01至 2012-07-13
建环308
何英
一、程序设计目的和要求 ........................................................................ 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 Long
Dim CharNum As Integer, RandomInteger As Integer Dim CharSingle As String * 1 On Local Error GoTo EDcodeError EDcode$ = \"\"
If Len(CharString) = 0 Then EDcode$ = \"1\" Exit Function End If X = Rnd(-Key)
For i = 1 To Len(CharString) CharSingle = Mid$(CharString, i, 1) CharNum = Asc(CharSingle)
RandomInteger = Int(256 * Rnd) And &H7F CharNum = CharNum Xor RandomInteger CharSingle = Chr$(CharNum) EDcode$ = EDcode$ + CharSingle Next i Exit Function
EDcodeError: EDcode$ = \"0\" End Function
四、测试数据及其结果
测试数据记录:
文件加密的初始界面
按1选项后
再次确定后
输入密码后即完成加密 解密过程类似
五、课程设计总结
在这个编程中,如果在设计时存在逻辑错误,虽然源代码没错,不过在运行
时就有问题,在调试中前后函数的功能要对应,要不然就不能正确运行,还有一些基本的符合不符合规范,注意英文字母大小的书写。
通过这个C语言程序的编写,我遇到了许多问题,如:有些源代码的运用不是很清楚,这个加密解密处理文件比较大,处理起来比较麻烦,不过通过查阅资料,在草稿纸上进行算法的书写,终于把它搞定,让我明白坚持的力量,更重要的是怎么学习,要懂得不懂就要问,懂得吃苦了,比如我在调试的过程中就遇到了许多问题,不过我一个个的,慢慢的进行下去,这是我收获最大的,学C语言要多练才能编号程序。
六、 附录
附录1:参考文献
1. 谭浩强 C语言程序设计(第二版) 北京:高等教育出版社,2002 2. 谭浩强 C语言程序设计 清华大学出版社
3. 徐士良等. C语言常用算法程序集 清华大学出版社
4. 黄明等. 21世纪进阶辅导 C语言程序设计.大连理工大学出版社,2005 5. 马靖善等. C语言程序设计.清华大学出版社,2005
6. 张毅坤等. C语言程序设计教程[M] .西安交通大学出版社,2003 7. 张龙祥等. 面向对象程序设计[M].北京:人民邮电出版社,2001 8. 李丽娟 C/C++语言程序设计教程—从模块化到面向对象(第三版)
附录2:程序源代码
#include #include //异或函数 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\ // 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\ 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\ //把字符密码转化为整形来异或 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\ fclose(f0); fclose(fe); } } if (key==50) { system(\"cls\"); printf(\"请输入要解密的文件路径\\n\"); scanf(\"%s\ // 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\ 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\ //把字符密码转化为整形来异或 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\ system(\"pause\"); fclose(f0); fclose(fd); } } } while(key!=27);//当key为0,即读写两个文件都打开成功时才结束循环 return 0; printf(\"\\n谢谢使用! \\n\"); system(\"pause\"); 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务