收藏 分销(赏)

电子系c语言程序设计加密解密.doc

上传人:1587****927 文档编号:1362618 上传时间:2024-04-24 格式:DOC 页数:24 大小:218.11KB 下载积分:10 金币
下载 相关 举报
电子系c语言程序设计加密解密.doc_第1页
第1页 / 共24页
电子系c语言程序设计加密解密.doc_第2页
第2页 / 共24页


点击查看更多>>
资源描述
课程设计报告 课程设计名称: C语言程序设计 指导教师: 学 生: 学 号: 学 院: 电子信息工程学院 完成时间: 2011年9月27日 嘉应学院电子信息工程学院 C语言课程设计说明书 目录 1 需求分析 1 2总体设计 2 3详细设计 3 3.1 换位加密流程图 3 3.2 换位解密流程图 3 3.3 替代加密流程图 3 3.4 替代解密流程图 3 4调试与测试 4 5测试结果 5 6附录 6 1 需求分析 问题描述(实验指导书中已经给出) ①数据的输入和输出;要求使用文件操作。文件(明文,仅限于英文字母)存放在某一已知文本文件中,加密后的文件(密文)存放在另一文件中。 ②换位加密和解密: 加密:根据密钥(即移位位数,用户从键盘输入)将对应字符进行移位操作,输出密文; 解密:输入密文后再输入移位位数则可输出明文; ③凯撒加密和解密: 加密:根据密钥(即移位位数,用户从键盘输入)将对应字符进行移位操作,输出密文; 解密:输入密文后再输入移位位数则可输出明文; ④统计单词的个数; ⑤退出。 21 2总体设计 (程序设计总流程图,可以画带流程线的流程图) 此处只需要写出一个流程图就可以了,就是总的那个流程图,请规范的画图。不需要分出2.1和2.2. byebye() miwentongji() mingwentongji() caesarde() caesaren() transpde() transpen(); caidan() welcome() 开始 3详细设计 (各模块功能说明,如函数功能、入口及出口参数说明,函数调用关系描述等 这块大家问题最多了,这里不是写程序代码,而是写流程图里面各个主要函数的作用,函数之间关系的说明。 以第1题为例,此处应为: 3.1 换位加密流程图 流程图 (对流程图加以说明。可以把关键语句放在此处,加以注释说明) 建立mingwen.txt和miwen.txt文件 输入密钥n 输入明文到数组r k=strlen(r)j 计算数组r长度 fputc(r[i],mingwen) 将明文存放到mingwen.txt文件中 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=0 for i=0 to hang for i=m to hang*n for j=0 to n h[i]='a'+j j++ for i=0 to hang zl[i][j]=h[z] z++ zl[i][j]=h[z] z++ for j=o to n z=0 fputc(zl[j][i],miwen) z++ 输出he[z] for j=0 to hang he[z]=zl[j][i] for i=0 to n fclose() 关闭并保存mingwen.txt文件 fclose() 关闭并保存miwen.txt文件 清屏 返回菜单 3.2 换位解密流程图 流程图 (对流程图加以说明。可以把关键语句放在此处,加以注释说明) 建立mingwen.txt和miwen.txt文件 输入密钥n 输入明文到数组r k=strlen(r)j 计算数组r长度 fputc(r[i],miwen) 将密文存放到miwen.txt文件中 for i=0 to k 关闭并保存miwen.txt文件 打开miwen.txt文件 space(h,r) 将明文去空格并放到数组h中 m=strlen(h) 计算数组h长度 m%n==0 是 否 hang=m/n hang=m/n+1 j=0 for i=0 to n for i=m to hang*n for j=0 to hang h[i]='a'+j j++ for i=0 to n zl[i][j]=h[z] z++ zl[i][j]=h[z] z++ for j=o to hang z=0 fputc(zl[j][i],mingwen) z++ 输出he[z] for j=0 to n he[z]=zl[j][i] for i=0 to hang fclose(mingwen) 关闭并保存mingwen.txt文件 fclose(miwen) 关闭并保存miwen.txt文件 清屏 返回菜单 3.3 替代加密流程图 流程图 (对流程图加以说明。可以把关键语句放在此处,加以注释说明) 建立mingwen.txt和miwen.txt文件 ch=getchar() 接收回车字符 Ch=getchar() 开始输入明文 ch=getchar() fputc(ch,mingwen) 将明文放到mingwen.txt文件中 当ch!='\n' fclose(mingwen)) 关闭并保存mingwen.txt文件 输入密钥 i 直到!(i>=0&&i<=26)成立 打开mingwen.txt文件 ch=fgetchar(mingwen) 开始从明文中读出字符 当ch!=EOF ch=fgetc(mingwen) 输出ch fputc(ch,miwen) ch=ch-26 ch=ch+i; ch>'Z'&&ch<='Z'+i||ch>'z' 是 否 (ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z') 是 否 fclose(mingwen) 关闭并保存mingwen.txt文件 fclose(miwen); 关闭并保存miwen.txt文件 清屏 返回菜单 3.4 替代解密流程图 流程图 (对流程图加以说明。可以把关键语句放在此处,加以注释说明) 建立mingwen.txt和miwen.txt文件 ch=getchar() 接收回车字符 Ch=getchar() 开始输入明文 ch=getchar() fputc(ch,mingwen) 将明文放到mingwen.txt文件中 当ch!='\n' fclose(mingwen)) 关闭并保存mingwen.txt文件 输入密钥 i 直到!(i>=0&&i<=26)成立 打开mingwen.txt文件 ch=fgetchar(mingwen) 开始从明文中读出字符 当ch!=EOF ch=fgetc(miwen) 输出ch fputc(ch,mingwen) ch=ch+26 ch=ch+i; ch>'Z'&&ch<='Z'+i||ch>'z' 是 否 (ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z') 是 否 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 运行结果:Cigejusiohea 2换位解密 源码:Cigejusiohea 密钥:4 运行结果:Ceshijieguoa 3凯撒加密 源码:Ce shi jie guo 密钥:4 运行结果:Gi wlm nmi kys 4:凯撒解密 源码:Gi wlm nmi kys 密钥:4 运行结果:Ce shi jie guo 5. 明文统计 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个单词。\n",i); printf("按enter键返回主菜单\n"); ch=getchar();ch=getchar(); system("cls"); caidan(); } miwentongji() //统计密文单词个数 { FILE *miwen ; char ch; int i=1; if((miwen=fopen(b,"r"))==NULL) {printf("不能打开文件\n"); exit(0); } ch=fgetc(miwen); while(ch!=EOF) { if(ch==' ') i++; ch=fgetc(miwen); } printf("密文中有%d个单词。\n",i); printf("按enter键返回主菜单\n"); ch=getchar();ch=getchar(); system("cls"); caidan(); } caidan() //菜单函数 { char a; printf("\n\n\n\n"); printf("\t\t\t\t1.换位加密\n\n"); printf("\t\t\t\t2.换位解密\n\n"); printf("\t\t\t\t3.凯撒加密\n\n"); printf("\t\t\t\t4.凯撒解密\n\n"); printf("\t\t\t\t5.明文统计\n\n"); printf("\t\t\t\t6.密文统计\n\n"); printf("\t\t\t\t7.退 出\n\n"); printf("\t\t\t请输入您要操作的项目编号\n"); a=getchar(); switch(a) { case'1':system("cls"); transpen(); break; case'2':system("cls"); transpde(); break; case'3':system("cls"); caesaren(); break; case'4':system("cls"); caesarde(); break; case'5':system("cls"); mingwentongji(); break; case'6':system("cls"); miwentongji(); break; case'7':system("cls"); tuichu(); break; default:system("cls"); caidan(); } } void main() //主函数 { char ch; welcome(); printf("按enter键继续\n"); ch=getchar(); system("cls"); caidan(); }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服