当前位置:文档之家› (完整word版)电子系c语言程序设计加密解密

(完整word版)电子系c语言程序设计加密解密

课程设计报告课程设计名称: C语言程序设计指导教师:学生:学号:学院:电子信息工程学院完成时间: 2011年9月27日嘉应学院电子信息工程学院1C语言课程设计说明书目录1 需求分析 (1)2总体设计 (2)3详细设计 (3)3.1 换位加密流程图 (3)3.2 换位解密流程图 (4)3.3 替代加密流程图 (5)3.4 替代解密流程图 (6)4调试与测试 (8)5测试结果 (8)6附录 (11)I1 需求分析问题描述(实验指导书中已经给出)①数据的输入和输出;要求使用文件操作。

文件(明文,仅限于英文字母)存放在某一已知文本文件中,加密后的文件(密文)存放在另一文件中。

②换位加密和解密:加密:根据密钥(即移位位数,用户从键盘输入)将对应字符进行移位操作,输出密文;解密:输入密文后再输入移位位数则可输出明文;③凯撒加密和解密:加密:根据密钥(即移位位数,用户从键盘输入)将对应字符进行移位操作,输出密文;解密:输入密文后再输入移位位数则可输出明文;④统计单词的个数;⑤退出。

2总体设计(程序设计总流程图,可以画带流程线的流程图)此处只需要写出一个流程图就可以了,就是总的那个流程图,请规范的画图。

不需要分出2.1和2.2.开始welcome()caidan()transpen( ); transpde()caesaren()caesarde() mingwent miwentongji(byebye()3详细设计(各模块功能说明,如函数功能、入口及出口参数说明,函数调用关系描述等这块大家问题最多了,这里不是写程序代码,而是写流程图里面各个主要函数的作用,函数之间关系的说明。

以第1题为例,此处应为:3.1 换位加密流程图流程图(对流程图加以说明。

可以把关键语句放在此处,加以注释说明) 建立mingwen.txt 和miwen.txt 文件输入密钥n输入明文到数组rk=strlen(r)j 计算数组r 长度for i=0 to k关闭并保存mingwen.txt 文件打开mingwen.txt 文件space(h,r) 将明文去空格并放到数组h 中m=strlen(h) 计算数组h 长度m%n==0是 否hang=m/n hang=m/n+1 j=0for i=0 to hang for i=m to hang*nz=0fputc(r[i],mingwen) 将明文存放到mingwen.txt文件中for j=0 to n h[i]='a'+j j++for i=0 to hangzl[i][j]=h[z] z++ for j=o to nzl[i][j]=h[z]z++for i=0 to nfor j=0 to hanghe[z]=zl[j][i]输出he[z]z++fputc(zl[j][i],miwen)fclose() 关闭并保存mingwen.txt文件fclose() 关闭并保存miwen.txt文件清屏返回菜单3.2 换位解密流程图流程图(对流程图加以说明。

可以把关键语句放在此处,加以注释说明)建立mingwen.txt和miwen.txt文件输入密钥n输入明文到数组rk=strlen(r)j 计算数组r长度for i=0 to kfputc(r[i],miwen) 将密文存放到miwen.txt文件中关闭并保存miwen.txt文件打开miwen.txt文件space(h,r) 将明文去空格并放到数组h中m=strlen(h) 计算数组h长度m%n==0是 否hang=m/n hang=m/n+1 j=0for i=0 to n for i=m to hang*nz=0for i=0 to hangfclose(mingwen) 关闭并保存mingwen.txt 文件fclose(miwen) 关闭并保存miwen.txt 文件清屏 返回菜单3.3 替代加密流程图流程图(对流程图加以说明。

可以把关键语句放在此处,加以注释说明)建立mingwen.txt 和miwen.txt 文件ch=getchar() 接收回车字符Ch=getchar() 开始输入明文当ch!='\n'fclose(mingwen)) 关闭并保存mingwen.txt 文件for j=0 to hang h[i]='a'+j j++for i=0 to nzl[i][j]=h[z] z++ for j=o to hangzl[i][j]=h[z]z++for j=0 to nhe[z]=zl[j][i]输出he[z]z++fputc(zl[j][i],mingwen)fputc(ch,mingwen) 将明文放到mingwen.txt 文件中ch=getchar()输入密钥 i直到!(i>=0&&i<=26)成立打开mingwen.txt文件ch=fgetchar(mingwen) 开始从明文中读出字符当ch!=EOF(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')是否 ch=ch+i;ch>'Z'&&ch<='Z'+i||ch>'z'是否ch=ch-26fputc(ch,miwen)输出chch=fgetc(mingwen)fclose(mingwen) 关闭并保存mingwen.txt文件fclose(miwen); 关闭并保存miwen.txt文件清屏返回菜单3.4 替代解密流程图流程图(对流程图加以说明。

可以把关键语句放在此处,加以注释说明)建立mingwen.txt和miwen.txt文件ch=getchar() 接收回车字符Ch=getchar() 开始输入明文当ch!='\n'fputc(ch,mingwen) 将明文放到mingwen.txt文件中ch=getchar()fclose(mingwen)) 关闭并保存mingwen.txt文件输入密钥 i直到!(i>=0&&i<=26)成立打开mingwen.txt文件ch=fgetchar(mingwen) 开始从明文中读出字符当ch!=EOF(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z') 是否 ch=ch+i;ch>'Z'&&ch<='Z'+i||ch>'z'是否ch=ch+26fputc(ch,mingwen)输出chch=fgetc(miwen)fclose(mingwen) 关闭并保存mingwen.txt文件fclose(miwen); 关闭并保存miwen.txt文件清屏返回菜单4调试与测试(调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施)调试程序,描述测试过程中遇到的问题和解决办法1.文件操作时打开的文件应该及时关闭,不然不会保存,在下次打开时就读不到以前存放在该文件里面的数据,而编译时却不会提示有错误。

2..函数调用时,被调函数必须在前面声明或者写在调用函数的上面,不然在编译时也不会提示错误,程序却不能执行。

3.空格的去除;采用指针的方法将去除空格的字符串放到另一个数组中4.菜单函数的容错;用default:system("cls"); caidan();实现。

5. 加密解密后返回主菜单;在每个函数后面加ch=getchar();ch=getchar();system("cls");caidan();第一个h=getchar()接收回车字符,第二个ch=getchar()使屏幕上的显示暂停,并实现返回主菜单的操作。

5测试结果(用几组测试数据进行测试算法设计的正确性,要包括测试数据和运行结果)。

此处需要给出你输入的源码,以及程序运行后出来的结果,可以适当的截图。

1:换位加密源码:Ce shi jie guo密钥:4运行结果:Cigejusiohea2换位解密源码:Cigejusiohea密钥:4运行结果:Ceshijieguoa3凯撒加密源码:Ce shi jie guo密钥:4运行结果:Gi wlm nmi kys4:凯撒解密源码:Gi wlm nmi kys 密钥:4运行结果:Ce shi jie guo5.明文统计6.密文统计6附录(源程序清单和结果:源程序要加注释)此处需要些出你的源程序代码,以及对主要代码的一些功能或作用说明。

#include<stdio.h>#include<stdlib.h>#include<string.h>char a[]={"mingwen.txt"},b[]={"miwen.txt"};welcome() //欢迎界面{printf("\n\n\n\n\n\n\n\n\n\t\t****************************************\n\n");printf("\t\t\t简朴寨加密解密欢迎您\n\n");printf("\t\t****************************************\n");printf("\n\n\n\n\n\n\t\t\t\t\t\t\t电信101班陈仁波\n");}byebye() //退出界面{printf("\n\n\n\n\n\n\n\n\n\t\t**************************************\n");printf("\t\t**************************************\n\n");printf("\t\t\t\t欢迎使用\n\n");printf("\t\t**************************************\n");printf("\t\t**************************************\n");}tuichu() //退出菜单{ char tc;printf("\n\n\n\n\n\n\n\n\n\t\t********************************************\n\n");printf("\t\t\t\t 确定退出???\n\n");printf("\t\t\t 确定请按Y, 取消请按N\n\n");printf("\t\t********************************************\n");tc=getchar();tc=getchar();if(tc=='n'||tc=='N'){system("cls");caidan();}else if(tc=='y'||tc=='Y'){system("cls");byebye();}else{ system("cls");tuichu();}}char *space(char *a,char *b)// 去空格{char *c = a;int n =0;while (*b!='\0'){if (*b!=' '){*c = *b;n++;c++;}b++;}*c='\0';}transpen() //换位加密{FILE *mingwen,*miwen;int i,j,n,m,k,z=0,hang;char ch;char r[1000],h[100],zl[10][10],he[100];if((mingwen=fopen(a,"w+"))==NULL){printf("不能打开文件\n");exit(0);}if((miwen=fopen(b,"w+"))==NULL){printf("不能打开文件\n");exit(0);}printf("请输入密钥\n");scanf("%d",&n);printf("请输入明文\n");ch=getchar();gets(r);k=strlen(r);for(i=0;i<k;i++)fputc(r[i],mingwen);fclose(mingwen);if((mingwen=fopen(a,"r"))==NULL){printf("不能打开文件\n");exit(0);}space(h,r);m=strlen(h);if(m%n==0){hang=m/n;for(i=0;i<hang;i++){for(j=0;j<n;j++){zl[i][j]=h[z];z++;}}}else{hang=m/n+1;j=0;for(i=m;i<(hang*n);i++){h[i]='a'+j;j++;}for(i=0;i<hang;i++){for(j=0;j<n;j++){zl[i][j]=h[z];z++;}}}z=0;for(i=0;i<n;i++)for(j=0;j<hang;j++){he[z]=zl[j][i];printf("%c",he[z]);z++;fputc(zl[j][i],miwen);}printf("\n");fclose(mingwen);fclose(miwen);printf("\n\n");printf("密文请查看miwen.txt\n\n\n按enter键返回主菜单\n");ch=getchar();system("cls");caidan();}transpde() //换位解密{FILE *mingwen,*miwen;int i,j,n,m,k,z=0,hang;char ch;char r[1000],h[100],zl[10][10],he[100];if((mingwen=fopen(a,"w+"))==NULL){printf("不能打开文件\n");exit(0);}if((miwen=fopen(b,"w+"))==NULL){printf("不能打开文件\n");exit(0);}printf("请输入密钥\n");scanf("%d",&n);printf("请输入密文\n");ch=getchar();gets(r);k=strlen(r);for(i=0;i<k;i++)fputc(r[i],miwen);fclose(miwen);if((mingwen=fopen(b,"r"))==NULL){printf("不能打开文件\n");exit(0);}space(h,r);m=strlen(h);if(m%n==0){hang=m/n;for(i=0;i<n;i++){for(j=0;j<hang;j++){zl[i][j]=h[z];z++;}}}else{hang=m/n+1;j=0;for(i=m;i<(hang*n);i++){h[i]='a'+j;j++;}for(i=0;i<n;i++){for(j=0;j<hang;j++){zl[i][j]=h[z];z++;}}}z=0;for(i=0;i<hang;i++)for(j=0;j<n;j++){he[z]=zl[j][i];printf("%c",he[z]);z++;fputc(zl[j][i],mingwen);}fclose(mingwen);fclose(miwen);printf("\n\n");printf("明文请查看mingwen.txt\n\n\n按enter键返回主菜单\n");ch=getchar();system("cls");caidan();}caesaren() //凯撒加密{FILE *mingwen,*miwen;char ch;int i;if((mingwen=fopen(a,"w+"))==NULL){printf("不能打开文件\n");exit(0);}if((miwen=fopen(b,"w+"))==NULL){printf("不能打开文件\n");exit(0);}printf("请输入密文\n");ch=getchar();ch=getchar();while(ch!='\n'){fputc(ch,mingwen);ch=getchar();}fclose(mingwen);do{printf("请输入密钥(0~26)\n");scanf("%d",&i);}while(!(i>=0&&i<=26));if((mingwen=fopen(a,"r"))==NULL){printf("不能打开文件\n");exit(0);}ch=fgetc(mingwen);while(ch!=EOF){if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')){ch=ch+i;if(ch>'Z'&&ch<='Z'+i||ch>'z')ch=ch-26;}fputc(ch,miwen);printf("%c",ch);ch=fgetc(mingwen);}fclose(mingwen);fclose(miwen);printf("\n\n");printf("密文请查看miwen.txt\n\n\n按enter键返回主菜单\n");ch=getchar();ch=getchar();system("cls");caidan();}caesarde() //凯撒解密{FILE *mingwen,*miwen;char ch;int i;if((mingwen=fopen(a,"w+"))==NULL){printf("不能打开文件\n");exit(0);}if((miwen=fopen(b,"w+"))==NULL){printf("不能打开文件\n");exit(0);}printf("请输入密文\n");ch=getchar();ch=getchar();while(ch!='\n'){fputc(ch,miwen);ch=getchar();}fclose(miwen);do{printf("请输入密钥(0~26)\n");scanf("%d",&i);}while(!(i>=0&&i<=26));if((miwen=fopen(b,"r"))==NULL){printf("不能打开文件\n");exit(0);}ch=fgetc(miwen);while(ch!=EOF){if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')){ch=ch-i;if(ch<'a'&&ch>='a'-i||ch<'A')ch=ch+26;}fputc(ch,mingwen);printf("%c",ch);ch=fgetc(miwen);}fclose(mingwen);fclose(miwen);printf("\n\n");printf("明文请查看mingwen.txt\n\n\n按enter键返回主菜单\n");ch=getchar();ch=getchar();system("cls");caidan();}mingwentongji() //统计明文单词个数{FILE *mingwen ;char ch;int i=1;if((mingwen=fopen(a,"r"))==NULL){printf("不能打开文件\n");exit(0);}ch=fgetc(mingwen);while(ch!=EOF){if(ch==' ')i++;ch=fgetc(mingwen);}printf("明文中有%d个单词。

相关主题