《C语言课程设计》课程设计报告题目数据的加密与解密学号110803022姓名桂阳阳年级专业2011级通信工程指导教师蔡继盛完成日期2012 年 6 月 5 日安徽师范大学物理与电子信息学院College of Physics and Electronic Information, Anhui Normal University目录课程设计任务书 (3)摘要 (4)关键词 (4)原理 (4)一.系统功能分析 (5)1.1设计目的 (5)1.2功能描述 (5)二.C 语言程序编写 (6)2.1程序结构图 (6)2.2程序流程图 (6)2.3程序源代码 (8)三.程序功能示例 (13)3.1示例截图 (13)3.2测试过程 (16)四.设计体会与收获 (16)五.参考文献 (16)《C 语言程序》课程设计任务书摘要:作为保障数据数据安全的一种方式,对于信息的加密技巧起源于欧洲,最广为人知的编码机器是德国的German Enigma,在第二次世界大战中德国人利用它创建了加密信息系统,从而解决军事信息的保密通讯问题。
尽管加密技术被首先使用在军事通信领域,但是人们或许出于安全的考虑,开始逐渐对于商业机密、政府文件等重要信息实施加密手段。
数据加密应运而生。
其基本原理是:对明文(可读懂的信息)进行翻译,使用不同的算法对明文以代码形式(密码)实施加密。
该过程的逆过程称为解密,即将该编码信息转化为明文的过程。
从事数据加密研究的人称为密码编码者(Cryptographer),而从事对数据解密的专业人士称为密码分析者(Cryptanalyst)。
如今数据加密技术被广泛地应用与国民经济各个领域,特别是政府机关和国防情报部门,此外才是科学研究机关、商业部门、新闻出版、金融证券、交通管制与电力输送等部门。
而C语言程序设计教学不仅仅局限于使学生单纯地了解和掌握C语言的基本语法规范,而是要致力于培养学生运用C语言解决实际问题的编程能力。
C 语言程序设计教学方法的改革让学生从多角度、以多方式去了解和掌握C语言以及程序设计的精髓,着重培养学生无论以后在学习、工作中使用什么语言编程,都能灵活应用这些思想和方法的能力。
关键词:C语言,程序设计,换位法,换位位数,数据加密与解密原理:换位法加密的原理是将英文句子中的空格去除,然后将句子排成若干行,每行的字符数为换位位数,再按列输出即为密文,不足部分填入随机字母。
;例如英文can you come here 若换位位数取4,则密文为comraueench*yoe*,*代表随机字母,如右图所示:一、系统功能分析1.1 设计目的本课程设计的目的是为了保证个人数据资料不被他人非法窃取使用,保护个人的隐私及重要文件。
1.2 功能描述本程序主要是对已知文件(为英文字符)通过一定的算法将其转换成非本身的其他英文字母以达到文件加密的目的。
整个系统由以下几大功能模块组成。
1.主控选择模块此模块是主程序操作界面,供用户进行选择。
用户可选择执行加密或解密操作。
2.加密模块此模块执行加密操作,输入明文后,去除空格得s1,再判断有没有缺空格,有就补随机字母,然后按照换位位数进行加密,从而得到密文。
3.解密模块解密模块是完成对文件的解密工作,将密文转换为可被识别的明文。
从外部文件中读入任意一个文件并将它解密并显示出来。
本次综合训练是计算机科学与技术、信息管理与信息系统、软件工程专业重要的实践性环节之一,是在学生学习完《C语言程序设计》、《数据结构》课程后进行的一次全面的综合练习。
本课综合训练的目的和任务是:1.巩固和加深学生对C语言、数据结构课程的基本知识的理解和掌握;2.掌握C语言编程和程序调试的基本技能;3.利用C语言进行基本的软件设计;4.掌握书写程序设计说明文档的能力;5.提高运用C语言、数据结构解决实际问题的能力。
二、C 语言源程序编写:2.1 程序结构图:主函数2.2 程序流程图2.3程序源代码:#include<stdio.h>#include<string.h>#define CHANGDU 1000int main( ){char *jiami(char *p,char *s1,int key); char *jiemi(char *p,char *s2,int key); int key,i,j,len;char s1[CHANGDU];char s2[CHANGDU];char xstr[CHANGDU];printf("*****************************\n");printf(" * welcome to use the system! *\n");printf("*****************************\n");printf("qing shu ru yuan shi ming wen:");gets(s2);{int m=0,i=0,t;char ch;t=strlen(s2);for(i=0;i<t;i++)if(s2[i]!=' '&&s2[i]!='\0'){ch=s2[i];s1[m]=ch;m=m+1;}ch=s2[i];s1[m]=ch;if(s1[0]>='A'&&s1[0]<='Z')s1[0]=s1[0]+32;}puts(s1);printf("qing shu ru jia mi mi yao:"); scanf("%d",&key);jiami(xstr,s1,key);printf("jia mi mi wen shi:");printf("%s\n",xstr);if(jiemi(s1,xstr,key)!=NULL){;}else{printf("NULL");}{int a;char str[CHANGDU];printf("**********************************************\ n");printf("qing shu ru jie mi mi yao:");scanf("%d",&a);getchar();printf("qing shu ru jia mi mi wen:");gets(str);if(a==key&&str[0]==s1[0]){printf("jie mi ming wen shi:");puts(s2);}}}char *jiami(char *p,char *s1,int key){int i,j,len,len1,n=0;len=strlen(s1);if((len % key)!=0)len1=len+key-(len % key);elselen1=len;for(i=len;i<len1;i++)s1[i]=(char)((rand() % 26)+(rand() % 1)*('A'-'a')+'a'); s1[len1]=0;for(j=0;j<key;j++)for(i=0;i<(len1/key);i++)p[n++]=s1[i*key+j];p[n]=0;return p;}char *jiemi(char *p,char *s2,int key){int i,j,len,n=0;len=strlen(s2);if((len % key)!=0) return NULL;len=(len / key);for(i=0;i<len;i++)for(j=0;j<key;j++) {p[n++]=s2[j*len+i]; }p[n]=0;return p;}三.程序功能示例3.1示例截图:3.2测试过程:qing shu ru yuan shi ming wen:can you come herecanyoucomehereqing shu ru jia mi mi yao:4jia mi mi wen shi:comraueenchiyoea******************************************qing shu ru jie mi mi yao:4qing shu ru jia mi mi wen:comraueenchiyoeajie mi ming wen shi:can you come here四.设计体会与收获这次C语言课程设计任务是设计一个程序解决数据的加密与解密问题,我与郭端杰同学一组,在设计源程序中,我是负责编写两个调用函数的,分别是加密函数和解密函数,搭档是负责编写主函数,在编译过程中,也遇到了不少困难和问题,像换位法加密和解密过程,到底怎样设计函数才能达到换位的要求,从而达到加密与解密的效果,在解决问题的过程中,也学会了不少知识。
五.参考文献C语言高级实例解析;清华大学出版社。
C语言程序设计习题与实验设计指导;电子科技大学出版社,编者孙淑霞,周家纪,丁照宇。
物理与电子信息学院课程设计评定意见注:本页与上一页用A3纸套印成封面和封底,课程设计报告正文用A4纸打印然后装订。