课程设计电文加密.docx
《课程设计电文加密.docx》由会员分享,可在线阅读,更多相关《课程设计电文加密.docx(12页珍藏版)》请在冰豆网上搜索。
![课程设计电文加密.docx](https://file1.bdocx.com/fileroot1/2022-11/27/3df13f03-ccb6-467c-9e19-15f0ea39d44f/3df13f03-ccb6-467c-9e19-15f0ea39d44f1.gif)
课程设计电文加密
数据结构课程设计任务书
学院名称:
数学与计算机学院课程代码:
_________________
专业:
年级:
一、设计题目:
电文的加密问题
二、主要内容
电文(字符串)加密,形成密码文(字符串)的问题。
假定原文为C1C2C3……Cn,加密后产生的密文为S1S2S3……Sn。
首先读入一个正整数Key(大于1)作为加密钥匙并将密文字符位置按顺时针方向连成一个环(双向循环链表)。
加密时从S1位置起顺时针方向计数,当数到第Key个字符位置时将原文中的字符C1放入该密文字符位置,同时从环中除去该字符位置。
接着,从环中下一个字符位置起继续计数,当再次数到第Key个字符位置时,将原文中的C2放入其中同时除去此位置……,类推,直至n个原文字符全部放入密文环中。
由些产生的S1S2S3……Sn即为原文的密文。
三、具体要求及提交的材料
1.做好设计计划,认真查阅相关资料,完成程序设计及调试;
2.按《课程设计说明书_实例模板》完成课程设计说明书的撰写;
3.设计结束后,必须上交如下材料:
(1)《课程设计说明书(报告)》打印稿一份;
(2)课程设计说明书及源代码电子文档
四、主要技术路线提示
认真分析系统功能需求,拟定设计方案和程序框架,查阅相关资料,完成算法设计和程序调试。
五、进度安排
共计两周时间,建议进度安排如下:
1.选题,应该在上机实验之前完成
2.需求分析、方案拟定、程序框架思考可分配4学时
3.详细的程序设计可分配8学时
4.调试和分析可分配8学时。
可以有2学时的机动,即提前完成设计任务的学生可提前安排程序验收和答辩
六、推荐参考资料
1.冯博琴等编著,《软件技术基础》(修改版),西安交通大学出版社,1997
2.严蔚敏等著,《数据结构》,清华大学出版社,2003
3.李芸芳等著,《软件技术基础》(第二版),清华大学出版社,2000
4.徐孝凯等著,《数据结构(C语言描述)》,清华大学出版社,2004
指导教师签名日期年月日
系主任审核日期年月日
摘要………………………………………………………………………………1
1引言……………………………………………………………………………2
2设计方案………………………………………………………………………3
2.1整体方案设计………………………………………………………………3
2.2电文存储……………………………………………………………………4
2.4.构建双向循环链表…………………………………………………………5
2.4电文转换密文………………………………………………………………6
2.5主函数main…………………………………………………………………7
3程序演示………………………………………………………………………8
总结………………………………………………………………………………10
致谢………………………………………………………………………………11
参考文献…………………………………………………………………………12
附录………………………………………………………………………………13
摘要
学习C语言和数据结构的知识,可以让我们对程序设计语言的理解和运用深刻化、时代化。
课程设计是我们从理论走向实践的桥梁,是锻炼我们运用理论知识能力的良机。
随着计算机的普及,社会信息量的与日俱增,信息安全和个人隐私的注重受到越来越多的人的关注,其数量规模比以前任何时候都大,无论个人还是公司乃至整个国家信息安全都显得越来越重要,一旦隐私泄露可能会造成不可估量的损失。
如何使自己的信息更加安全方便快捷也成了人们追求的目标,并且急需这样的软件来完成更多的功能。
针对平时信息处理的重要程度,该软件主要是提供了电文加密的功能,将所发的信息转换成密文,以确保其安全。
关键词:
电文加密,信息安全,隐私
1引言
1.1问题的提出
以前的操作系统等系统软件主要是由汇编语言编写的(包括UNIX操作系统在内)。
由于汇编语言依赖于计算机硬件,程序的可读性和可移植性都比较差。
为了提高可读性和可移植性,最好改用高级语言,但一般高级语言难以实现汇编语言的某些功能(汇编语言可以直接对硬件进行操作,例如,对内存地址的操作、位操作等)。
人们设想能否找到一种既具有一般高级语言特性,又具有低级语言特性的语言,集它们的优点于一身。
于是,C语言就在这种情况下应运而生了。
1.2C语言
C语言既有高级语言的特点,又具有汇编语言的特点;既是一个成功的系统设计语言,有时一个使用的程序设计语言;既能用来编写不依赖计算机硬件的应用程序,又能用来编写各种系统程序;是一种受欢迎、应用广泛的程序设计语言。
1.3C语言发展过程
1973年,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。
1977年DennisM.Ritchie发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。
1978年BrianW.Kernighian和DennisM.Ritchie出版了名著《TheCProgrammingLanguage》,从而使C语言成为目前世界上流行最广泛的高级程序设计语言。
1.4任务与分析
电文(字符串)加密,形成密码文(字符串)的问题。
假定原文为C1C2C3……Cn,加密后产生的密文为S1S2S3……Sn。
首先读入一个正整数Key(大于1)作为加密钥匙并将密文字符位置按顺时针方向连成一个环(双向循环链表)。
加密时从S1位置起顺时针方向计数,当数到第Key个字符位置时将原文中的字符C1放入该密文字符位置,同时从环中除去该字符位置。
接着,从环中下一个字符位置起继续计数,当再次数到第Key个字符位置时,将原文中的C2放入其中同时除去此位置……,类推,直至n个原文字符全部放入密文环中。
由些产生的S1S2S3……Sn即为原文的密文。
2设计方案
2.1整体设计方案
此课题是研究电文加密的问题,将明文转换成密文,以实现信息安全。
为了直观和方便,画出流程图如下图1:
图1程序总的流程图
该流程图很直观的描述了整个程序运行过程。
2.2电文存储
用户输入的电文和转换后的密文都需要存储;我们就要用相应的程序去实现这个过程,这才是我们最后的目的。
#include
#include
#include
//头文件
typedefstructnode
{
charch;
structnode*forward;/*链接下一节点*/
structnode*backward;/*链接前一节点*/
}CODE;
//定义双链表,用于存储密文
charocode[256];
intkey,num=0;
printf("输入原文字符串:
");
while(num<255&&(ocode[num++]=getchar())!
='\n');
ocode[(num==255)?
num:
num-1]='\0';
//输入电文
ncode=(char*)malloc((length+1)*sizeof(char));
for(i=0;i{ncode[i]=loop[i].ch;
ncode[length]='\0';
returnncode;}
//定义线性表,用于存储电文
2.3构建双向循环链表
将密文字符位置按顺时针方向连成一个环,用双向循环链表操作存储。
char*decode(char*ocode,intkey)
{
char*ncode;
intlength,count,i;
CODE*loop,*p;
length=strlen(ocode);
loop=(CODE*)malloc(length*sizeof(CODE));
//动态分配密文环
for(i=0;i{
loop[i].forward=&loop[i+1];
loop[i].backward=&loop[i-1];
}
//构建双链表
loop[0].backward=&loop[length-1];
loop[0].forward=&loop[1];
loop[length-1].forward=&loop[0];
loop[length-1].backward=&loop[length-2];
//双向循环链表
2.4电文转换密文
for(p=loop,i=0;i{
for(count=1;countp=p->forward;
//从loop[0]位置起顺时针方向计数,数到第Key个字符位置
p->ch=*ocode++;
//将原文中的字符C1放入该密文字符位置
p->backward->forward=p->forward;
p->forward->backward=p->backward;
p=p->forward;
//从环中除去该字符位置
}
//产生密文链表
;
2.5主函数main
voidmain()
{
charocode[256];
intkey,num=0;
printf("输入电文字符串:
");
while(num<255&&(ocode[num++]=getchar())!
='\n');
ocode[(num==255)?
num:
num-1]='\0';
printf("\n");
do
{
printf("输入加密钥匙Key(大于1整数):
");
scanf("%d",&key);
}while(key<=1);
printf("\n");
printf("电文:
%s\n",ocode);
printf("密文:
%s\n",decode(ocode,key));
printf("\n");
}
3.程序演示:
对于所有执行过程,通过图片最好说明问题了:
程序开始如图2所示:
图2
输入电文,如图3所示:
图3
按下回车键,接着输入关键字,关键字要是大于1的整数,输入错误会继续提示输入,如图4所示:
图4
输入正确的关键字,假设输入23,如图5所示:
图5
如上图所示,电文为:
Iloveyouforever
密文为:
oveoieuofryervl
整个操作过程就是这样,很简单。
结论
经过一个多星期的上机实践学习,不断的编写,修改,终于完成了这个电文加密课程设计。
通过实践,我也发现我的好多不足之处,对C语言学习平时只是马马虎虎的过去了,真正自己去解决实际问题的时候才会发现自己学的多么糟糕,通过课程设计对自己的编程能力也有所提高;还有对C语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。
在这次课程设计中,我学会了很多东西,比如将学到的知识能综合运用到实践中,通过查资料的学习懂得了很多以前不懂的知识,丰富了我的知识面,在能力上也有很大的提高。
课程设计是一个既考验我们对知识掌握及运用能力,又考验我们写实验报告的逻辑组织能力。
因此通过这次课程设计让我受益匪浅。
在完成这次课程设计的的过程中虽然遇到了些问题,但在老师和同学的帮助下最终完成了这次的任务。
致谢
首先我要感谢老师的耐心指导和帮助,在他的督促下按时完成这个课程设计,并且对于我们提出的各种问题都能依依完整而仔细的回答,直到我们完全明白为止。
再者需要感谢的是教我们数据结构的老师,没有他们的教导就不会知道怎样完成这个课程设计,也不可能有基础来完成此次的课程设计。
整个完成的过程中周围的同学也给了不少帮助,在此真的非常感谢每一位给过我帮助的人!
参考文献
1.谭浩强等.C语言程序设计教程.高等教育出版社.2005
2.李建学等.数据结构课程设计案例精编(用C/C++描述).清华大学出版.2007
3.严蔚敏等.数据结构(C语言版).清华大学出版社.2003
4.冯博琴等编著,《软件技术基础》(修改版),西安交通大学出版社,1997
5.李芸芳等著,《软件技术基础》(第二版),清华大学出版社,2000
6.徐孝凯等著,《数据结构(C语言描述)》,清华大学出版社,2004
附录
#include
#include
#include
typedefstructnode
{
charch;
structnode*forward;//链接下一节点
structnode*backward;//链接前一节点
}CODE;
char*decode(char*ocode,intkey)
{
char*ncode;
intlength,count,i;
CODE*loop,*p;
length=strlen(ocode);
loop=(CODE*)malloc(length*sizeof(CODE));//动态分配密文环
for(i=0;i{
loop[i].forward=&loop[i+1];
loop[i].backward=&loop[i-1];//双链表
}
loop[0].backward=&loop[length-1];
loop[0].forward=&loop[1];
loop[length-1].forward=&loop[0];//双向循环链表
loop[length-1].backward=&loop[length-2];
for(p=loop,i=0;i{
/*产生密文链表*/
for(count=1;countp=p->forward;//从loop[0]位置起顺时针方向计数,数到第Key个字符位置
p->ch=*ocode++;//将原文中的字符C1放入该密文字符位置
p->backward->forward=p->forward;
p->forward->backward=p->backward;
p=p->forward;//从环中除去该字符位置
}
ncode=(char*)malloc((length+1)*sizeof(char));//构造线性表存储密文
for(i=0;incode[i]=loop[i].ch;
ncode[length]='\0';
returnncode;
}
voidmain()
{
charocode[256];
intkey,num=0;
printf("输入电文字符串:
");
while(num<255&&(ocode[num++]=getchar())!
='\n');
ocode[(num==255)?
num:
num-1]='\0';
printf("\n");
do
{
printf("输入加密钥匙Key(大于1整数):
");
scanf("%d",&key);
}while(key<=1);
printf("\n");
printf("电文:
%s\n",ocode);
printf("密文:
%s\n",decode(ocode,key));
printf("\n");
}