《C语言课程设计》
课程设计报告
安徽师范大学物理与电子信息学院
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 语言源程序编写:
1 程序结构图:
主函数
2 程序流程图
3所有的课题程序源代码:
#include<stdio.h>
#include<string.h>
#define CHANGDU 1000
int 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);
else
len1=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;
}
我负责编写的主程序源代码:
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);
else
len1=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;
}
三.程序功能示例
3.1示例截图:
3.2测试过程:(以第一幅截图举例)
(1)qing shu ru yuan shi ming wen:Can you come here?
canyoucomehere?
qing shu ru jia mi mi yao:4
jia mi mi wen shi:comraueenchi?yoea
******************************************
qing shu ru jie mi mi yao:4
qing shu ru jia mi mi wen:comraueenchi?yoea
jie mi ming wen shi:Can you come here?
(2)qing shu ru yuan shi ming wen:Can you come here
canyoucomehere?
qing shu ru jia mi mi yao:11
jia mi mi wen shi:cearrney?oiuackoymietht
******************************************
qing shu ru jie mi mi yao:11
qing shu ru jia mi mi wen: cearrney?oiuackoymietht
jie mi ming wen shi:Can you come here
四.设计体会与收获
该程序是我与牛涛,刘磊同学一起完成的,刘磊负责解密函数的编写,我负责加密函数的编写,牛涛负责编写主函数,然后三个人在加以整合、更改,得到以上程序。在编写主函数是遇到了一些问题,例如,在对待字符数组的处理问题上,遇到了些问题,但经过查阅书籍,最终得以解决,感受颇多。课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于游逆而解。同时,在老师的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
五.参考文献
《C语言程序设计》 谭浩强版
C语言程序设计 清华大学出版社 郭有强
《C语言程序设计习题与实验设计指导》电子科技大学出版社,编者孙淑霞,周家纪,丁照宇。
《标准C语言基础教程(第四版)》编者Gary J.Bronson
物理与电子信息学院课程设计评定意见
注:本页与上一页用A3纸套印成封面和封底,课程设计报告正文用A4纸打印然后装订
第二篇:c语言课程设计—数据加密解密
吉林工程技术师范学院
《C语言程序》课程设计
报告书
专业:班级: 学生姓名: 指导教师:
20xx年06月
信息工程学院 设计题目: 数据加密解密
目 录
摘 要 ……………………………………………………2
第一章 绪 论 …………………………………………3 1 .1 C语言概述 …………………………………………3 1 .2 C语言出现的历史背景 ………………………………3
第二章 开发环境及相关技术的介绍…………………4 2 .1 开发环境的介绍 ……………………………………4 2 .2 有关开发环境的技术 ………………………………4
第三章 总体设计与详细设计…………………………6 3 .1 本程序解决的有关技术问题 …………………………6 3 .2 本程序流程图………………………………………9
第四章 编码实现……………………………………12
4 .1 程序的总体实现与使用方法…………………………12 4 .2 实现本程序的关键C技术 …………………………13
第五章 调试与测试…………………………………16
第六章 总结与心得 …………………………………19 附录: 参考文献………………………………………20 源代码…………………………………………………21
1
摘 要
作为保障数据安全的一种方式,对于信息的加密技巧起源于欧洲,公元前20xx年,埃及人是最先使用象形文字作为信息编码的人。随着时间推移,巴比伦、美索不达米亚和希腊文明都开始使用一些方法来保护他们的书面信息(明文)。后来,被Julias Caesar(凯撒大帝)使用,也曾用于历次战争中,包括美国独立战争、美国内战和两次世界大战。
最广为人知的编码机器是德国的German Enigma,在第二次世界大战中德国人利用它创建了加密信息系统,从而解决军事信息的保密通讯问题。此后,由于Alan Turing和Ultra计划以及其他工程技术人员的不泄努力,盟军终于对德国人的密码成功破译了,进而导致第二次世界大战结束。
当初,美国人对于计算机的研究,主要目的是用于破解德国人的通讯密码,这在当时,人们并没有意识到计算机技术此后的发展会影响世界历史进程,从而在全球引发了一场信息革命。随着计算机的发展,运算能力的增强,传统的密码知识和技能都变得十分简单了而很容易被人破解,于是人们又不断地研究出了新的数据加密方式,如私有密钥算法和公共密钥算法。可以说,是计算机技术的飞速发展在推动了数据加密技术的发展。
尽管加密技术被首先使用在军事通信领域,但是人们或许出于安全的考虑,开始逐渐对于商业机密、政府文件等重要信息实施加密手段。数据加密应运而生。其基本原理是:
对明文(可读懂的信息)进行翻译,使用不同的算法对明文以代码形式(密码)实施加密。该过程的逆过程称为解密,即将该编码信息转化为明文的过程。
从事数据加密研究的人称为密码编码者(Cryptographer),而从事对密码解密的专业人士称为密码分析者(Cryptanalyst)。如今数据加密技术被广泛地应用与国民经济各个领域,特别是政府机关和国防情报部门,此外才是科学研究机关、商业部门、新闻出版、金融证券、交通管制与电力输送等部门。
而C语言程序设计教学不仅仅局限于使学生单纯地了解和掌握 C 语言的基本语法规范,而是要致力于培养学生运用 C 语言解决实际问题的编程能力。C语言程序设计教学方法的改革让学生从多角度、以多方式去了解和掌握 C 语言以及程序设计的精髓,着重培养学生无论以后在学习、工作中使用什么语言编程,都能灵活应用这些思想和方法的能力。
关键字:数据加密,数据解密,加密,解密
2
第一章 绪 论
1.1 C语言概述
C语言是国际上广泛流行且很有发展前途的计算机高级语言,不仅用来编写应用软件,也用来编写系统软件。C语言功能丰富,使用灵活,可移植性好,深受广大用户欢迎。C语言的数据类型丰富,既具有高级程序设计语言的优点,又具有低级程序设计语言的特点;既可以用来编写系统程序,又可以用来编写应用程序。(例如,著名的UNIX操作系统就是用C语言编写的)因此,C语言正在被迅速地推广和普及。
1 .2 C语言出现的历史背景
在C语言诞生以前,操作系统及其他系统软件主要是用汇编语言实现的。由于汇编语言程序设计依赖于计算机硬件,其可读性和可移植性都很差,而一般的高级语言又难以实现对计算机硬件的直接操作,因此人们需要一种兼有汇编语言和高级语言特性的语言。C语言就是在这种环境下产生的。它最早是由Dennis Richie于19xx年设计并实现。它的产生同UNIX系统之间具有非常密切的联系——C语言是在UNIX系统上开发的。而无论UNIX系统本身还是其上运行的大部分程序,都是用C语言编写实现。同时,它同样适合于编写不同领域中的大多数程序。
C语言已经成为全球程序员的公共语言,并且由此产生了当前两个主流的语言C++和Java——它们都建立在C语言的语法和基本结构的基础上,而且现在世界上的许多软件都是在C语言及其衍生的各种语言的基础上开发而成。
目前,在微机上广泛使用的C语言编译系统有Turbo C、Borland C++、Microsoft Visual C++等。虽然它们的基本部分都是相同的,但还是有一些差异,本程序的设计采用Turbo C作为上机编程调试环境。
3
第二章 开发环境及相关技术的介绍
2 .1 开发环境的介绍
在C语言诞生以前,操作系统及其他系统软件主要是用汇编语言实现的。由于汇编语言程序设计依赖于计算机硬件,其可读性和可移植性都很差,而一般的高级语言又难以实现对计算机硬件的直接操作,因此人们需要一种兼有汇编语言和高级语言特性的语言。C语言就是在这种环境下产生的。它最早是由Dennis Richie于19xx年设计并实现。它的产生同UNIX系统之间具有非常密切的联系——C语言是在UNIX系统上开发的。而无论UNIX系统本身还是其上运行的大部分程序,都是用C语言编写实现。同时,它同样适合于编写不同领域中的大多数程序。
C语言已经成为全球程序员的公共语言,并且由此产生了当前两个主流的语言C++和Java——它们都建立在C语言的语法和基本结构的基础上,而且现在世界上的许多软件都是在C语言及其衍生的各种语言的基础上开发而成。
目前,在微机上广泛使用的C语言编译系统有Turbo C、Borland C++、Microsoft Visual C++等。虽然它们的基本部分都是相同的,但还是有一些差异,本程序的设计采用Turbo C作为上机编程调试环境。
2 .2 有关开发环境的技术
C语言的特点:
1. 简洁紧凑,灵活方便
C语言一共只有32个关键字,9种控制语句,程序书写自由,主要用小写字母表示.它把高级语言的基本结构和语句与低级语言的实用性结合起来.
C 语言可以象汇编语言一样对位,字节和地址进行操作, 而这三者是计算机最基本的工作单元.
2. 运算符丰富
C的运算符包含的范围很广泛,共有种34个运算符.C语言把括号,赋值,强制类型转换等都作为运算符处理.从而使C的运算类型极其丰富表达式类型多样化,灵活使用各种运算符可以实现在其它高级语言中难以实现的运算.
3. 数据结构丰富
C的数据类型有:整型,实型,字符型,数组类型,指针类型,结构体类型,共 4
用体类型等.能用来实现各种复杂的数据类型的运算.并引入了指针概念,使程序效率更高.另外C语言具有强大的图形功能, 支持多种显示器和驱动器.且计算功能,逻辑判断功能强大.
4. C是结构式语言
结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立.这种结构化方式可使程序层次清晰, 便于使用,维护以及调试.C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环,条件语句控制程序流向,从而使程序完全结构化.
5. C语法限制不太严格,程序设计自由度大
一般的高级语言语法检查比较严,能够检查出几乎所有的语法错误.而C语言允许程序编写者有较大的自由度.
6. C语言允许直接访问物理地址,可以直接对硬件进行操作
因此既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位,字节和地址进行操作,而这三者是计算机最基本的工作单元,可以用来写系统软件.
7. C语言程序生成代码质量高,程序执行效率高
一般只比汇编程序生成的目标代码效率低10へ20%.
8. C语言适用范围大,可移植性好
C语言有一个突出的优点就是适合于多种操作系统, 如DOS,UNIX,也适用于多种机型.
C#和.NET平台的概貌
C语言的缺点:
1. C语言的缺点主要是表现在数据的封装性上,这一点使得C语言在数据的安全性上做的有很大缺陷,这也是C和C++的一大区别。
2. C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。
5
第三章 总体设计与详细设计
3 .1 本程序解决的有关技术问题
本程序是一款小型的数据加密解密软件。数据加密是计算机网络安全很重要的一个部分。由于因特网身的不安全性,我们不仅对口令进行加密,有时也对在网上传输的文件进行加密。为了保证电子邮件的安全,人们采用了数字签名这样的加密技术,并提供基于加密的身份认证技术。数据加密也使电子商务成为可能。
一、密码技术
密码学是保密学的一部分。保密学是研究密码系统或通信安全的科学,它包括两个分支:密码学和密码分析学。密码学是对信息进行编码实现隐蔽信息的一门学问。密码分析学是研究分析破译密码的学问。两者相互独立,而又相互促进,正如病毒与反病毒技术一样。
采用密码技术可以隐藏和保护需要保密的消息,使未授权者不能提取信息。需要隐藏的消息称为明文。明文被变换成另一种隐藏形式就称为密文。这种变换称为加密。加密的逆过程,即从密文恢复出明文的过程称为解密。对明文进行加密时采用的一组规则称为加密算法。对密文解密时采用的一组规则称为解密算法。加密算法和解密算法通常都是在一组密钥控制下进行的,密钥决定了从明文到密文的映射,加密算法所使用的密钥称为加密密钥,解密算法所使用的密钥称为解密密钥。
二、密码体制分类
密码体制通常从三个独立的方面进行分类:
(1)按明文到密文的转换操作可分为:置换密码和易位密码。
所有加密算法都是建立在两个通用原则之上:置换和易位。
(2)按明文的处理方法可分为:分组密码和序列密码。
(3)按密钥使用个数可分:对称密码体制,非对称密码体制。
置换密码:是将明文的每个元素(比特、字母、比特或字母的组合)映射到其他元素。
易位密码:是对明文的元素进行重新布置。
分组密码:的加密方式是首先将明文序列以固定长度进行分组,每一组明文用相同的密钥和加密函数进行运算。 分组密码设计的核心上构造既具有可逆性又有很强的线性的算法。
序列密码:的加密过程是将报文,话音,图象,数据等原始信息转化成明文数据序列,然后将它同密钥序列进行异或运算。生成密文序列发送给接受者。
6
对称密码体制:如果发送方使用的加密密钥和接受方使用的解密密钥相同,或从其中一个密钥易于的出另一个密钥,这样的系统叫做对称的,但密钥或常规加密系统。
非对称密码体制:如果发送方使用的加密密钥和接受方使用的解密密钥不相同,从其中一个密钥难以推出另一个密钥,这样的系统就叫做不对称的,双密钥或公钥加密系统。
三、数据加密技术分类
(1)对称型加密,
(2)不对称型加密
(3)不可逆加密。
对称加密:使用单个密钥对数据进行加密或解密。
不对称加密:算法也称为公开加密算法,其特点是有两个密钥,只有两者搭配使用才能完成加密和解密的全过程。
不可逆加密算法:特征是加密过程不需要密钥,并且经过加密的数据无法被解密,只有同样输入的输入数据经过同样的不可逆算法才能得到同样的加密数据。
从通信网络的传输方面,数据加密技术可以分为3类:
(1)链路加密方式,
(2)节点到节点方式
(3)端到端方式。
链路加密方式:是一般网络通信安全主要采用的方式。
节点到节点加密方式:是为了解决在节点中数据是明文的缺点,在中间节点里装有加,解密的保护装置,由这个装置来完成一个密钥向另一个密钥的变换。
端到端方式:在端到端机密方式中,由发送方加密的数据在没有到达最终目的节点之前是不被解密的。
四、密码分析
试图发现明文或密钥的过程叫做密码分析。也就是同常所说的密码破译。密码分析人员使用的策略取决于加密方案的特性和分析人员可用信息。
密码分析过程通常包括:分析、假设、推断和证实等步骤。
(下表为各种加密消息破译类型)
7
加密消息破译类型
寻找密钥所需的平均时间
8
3 .2 本程序流程图
9
10
11
第四章 编码实现
4 .1 程序的总体设计与使用方法
本程序是针对数据加密解密技术设计的一款数据加密解密软件,它能对用户的密码进行算法逻辑上的加密。运行程序后,用户会看到一给非常友好的界面菜单,有3个选项可供选择。第一个是数据加密,第二个是数据解密,第三个是退出。这时,系统会提示用户去做选择。
Turbo C上显示的主菜单界面(这里是汉文实际英文)
========================================================
欢迎使用数据加密解密软件
========================================================
1.进行数据加密
2.进行数据解密
3.退出
请选择1—3 进行操作
========================================================
当用户选择第一个数据加密时,系统会提示用户输入小于16位的明文密码,用户把想要转换成密文的密码输入,按回车结束。这时,系统会透过自身的密钥加密算法自动将转换好的密文告诉用户,用户可以牢牢地记住,也可以选择把它记到纸上。按任意键可返回主菜单。
进入数据加密界面:
请输入16位以下明文:
XXXXXX→明文
数据加密后的密文:
XXXXXX→密文
按任意键返回主菜单!
当用户选择第二个数据解密时,系统会提示用户输入小于16位的密文,此次输入的是用户刚刚通过本程序加密后得到的密文,而不再是用户自己的密码,是把它输入进去后,系统会通过自身的密钥解密算法自动将转换好的明文告诉用户,用户可以自行验证。
进入数据解密界面:
12
请输入16位以下密文:
XXXXXX→密文
数据解密后的明文:
XXXXXX→明文
按任意键返回主菜单
当用户选择第三个退出时,退出本程序。(程序的关键在于密钥)
4 .2 实现本程序的关键C技术
本程序主要运用的系统函数:
gotoxy
函数功能:将光标移动到指定位置说明,Y行和X列;gotoxy(0,0)将光标移动到屏幕左上角。
main()
{ int x=13,y=7;
……
gotoxy(x,y);
puts("……");
gotoxy(x,y+1);
printf("……");
gotoxy(x,y+2);
……
}
此程序段运用gotoxy函数实现一个位于屏幕中央的菜单界面。
下面的就是加密与解密技术
Encrypt()
{
char sec[N],c;
int i,lg,f1,f2,f3;
f1=f2=1;f3=f1+f2;
……
scanf("%s",sec);
lg=strlen(sec);
for(i=0;i<lg/2;i++)
{
13
c=sec[i];
sec[i]=sec[lg-i-1]; sec[lg-i-1]=c;
}
for(i=0;i<lg;i++)
{
c=sec[i];
sec[i]=(char)((int)c+i+1); if(i<4)
sec[i]^=f1;
else
{
sec[i]^=f3;
f1=f2;
f2=f3;
f3=f1+f2;
}
}
……
}
Deciphering()
{
char sec[N],c;
int i,lg,f1,f2,f3;
f1=f2=1;f3=f1+f2;
……
scanf("%s",sec);
lg=strlen(sec);
for(i=0;i<lg;i++)
{
if(i<4)
sec[i]^=f1;
14
else
{
sec[i]^=f3;
f1=f2;
f2=f3;
f3=f1+f2;
}
c=sec[i];
sec[i]=(char)((int)c-i-1); }
for(i=0;i<lg/2;i++)
{
c=sec[i];
sec[i]=sec[lg-i-1]; sec[lg-i-1]=c;
}
……
}
15
第五章 调试与测试
1.程序运行后,会出现一个友好的界面,供用户选择。
2.当用户输入1要进行数据加密时,显示的界面,程序会提示用户输入字符并且不要超过16个。
16
3.当用户输入需要加密的明文后,经过内置的算法,程序会把其对应的密文告诉用户。
4.当用户选择2数据解密时出现的界面,程序会提示用户输入需要解密的密文并且不要超过16个。
17
5.当用户输入需要解密的密文后,经过内置的算法,程序会把解密后其对应的明文告诉用户。
18
第六章 总结与心得
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。
这是一款数据加密解密软件,它能对你的密码进行加密。有的时候,在我们输入密码时,很容易被别人看到,就算是看不到,都用星号来代替它们,盗密码者也能通过一些手段,将其破译。我就有过这样一段经历。我比较喜欢上网,在网吧输入QQ号和QQ密码不久,就提示我我的QQ号在其他地方已经登陆,这让我百思不得其解,不过我现在明白了,也许QQ这款软件给我的密码加密了,不过被盗密码者给破译了,也许QQ它根本就没有给我的密码加密被盗密码这监听到了。总之,我的密码是泄露了。那一次让我损失了不少,也让我明白了数据加密的道理。今天,借着这个课程设计的机会,我亲自做一款数据加密解密的小软件,小程序,我知道虽然我的小软件现在在任何场所任何地方都派不上用场,不过我相信,总有一天会的!
回顾起此次课程设计,至今我仍感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,在整整半个学期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识重新温故。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于游逆而解。同时,在老师的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
19
附 录:参考文献
1.全国计算机登记考试二级教程—C预言程序设计 高等教育出版社 田树青
2.C程序设计(第三版) 清华大学出版社 谭浩强
3.C语言程序设计 清华大学出版社 郭有强
20
附 录:源代码
#include<stdio.h>
#include<stdlib.h>
#define N 16
main()
{
int x=13,y=7;
char choice;
randomize();
while(1)
{
clrscr();
gotoxy(x,y);
puts("============================================");
gotoxy(x,y+1);
printf("Welcome to useing data encryption deciphering software"); gotoxy(x,y+2);
puts("=============================================");
gotoxy(x,y+3);
puts("1.Carry out the data encryption");
gotoxy(x,y+4);
puts("2.Carry out the data deciphering.");
gotoxy(x,y+5);
puts("3.Exit.");
gotoxy(x,y+7);
puts("Choose operation please 1 to 3......");
gotoxy(x,y+9);
puts("=============================================");
choice=getch();
switch(choice)
{
case '1':Encrypt();break;
case '2':Deciphering();break;
case '3':exit(0);break;
default:printf("Choose a mistake! Note the key imports arbitrarily again......");
21
getch();
}
}
}
Encrypt()
{
char sec[N],c;
int i,lg,f1,f2,f3;
f1=f2=1;f3=f1+f2;
clrscr();
printf("Please import not encryption 16 data please!\n"); scanf("%s",sec);
lg=strlen(sec);
for(i=0;i<lg/2;i++)
{
c=sec[i];
sec[i]=sec[lg-i-1];
sec[lg-i-1]=c;
}
for(i=0;i<lg;i++)
{
c=sec[i];
sec[i]=(char)((int)c+i+1);
if(i<4)
sec[i]^=f1;
else
{
sec[i]^=f3;
f1=f2;
f2=f3;
f3=f1+f2;
}
}
printf("Proclaimed in writing of the data encryption queen is:\n"); for(i=0;i<lg;i++)
{
printf("%c",sec[i]);
}
getchar();
22
printf("\nNote the key imports arbitrarily again......\n"); getch();
}
Deciphering()
{
char sec[N],c;
int i,lg,f1,f2,f3;
f1=f2=1;f3=f1+f2;
clrscr();
printf("Please import 16 data encrypting the queen!\n"); scanf("%s",sec);
lg=strlen(sec);
for(i=0;i<lg;i++)
{
if(i<4)
sec[i]^=f1;
else
{
sec[i]^=f3;
f1=f2;
f2=f3;
f3=f1+f2;
}
c=sec[i];
sec[i]=(char)((int)c-i-1);
}
for(i=0;i<lg/2;i++)
{
c=sec[i];
sec[i]=sec[lg-i-1];
sec[lg-i-1]=c;
}
printf("Proclaimed in writing of the data deciphering is:\n");
for(i=0;i<lg;i++)
{
printf("%c",sec[i]);
}
getchar();
queen 23
printf("\nNote the key imports arbitrarily again......"); getch();}
24