凯撒加密解密C语言课程设计.docx

上传人:b****7 文档编号:23310152 上传时间:2023-05-16 格式:DOCX 页数:26 大小:51.64KB
下载 相关 举报
凯撒加密解密C语言课程设计.docx_第1页
第1页 / 共26页
凯撒加密解密C语言课程设计.docx_第2页
第2页 / 共26页
凯撒加密解密C语言课程设计.docx_第3页
第3页 / 共26页
凯撒加密解密C语言课程设计.docx_第4页
第4页 / 共26页
凯撒加密解密C语言课程设计.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

凯撒加密解密C语言课程设计.docx

《凯撒加密解密C语言课程设计.docx》由会员分享,可在线阅读,更多相关《凯撒加密解密C语言课程设计.docx(26页珍藏版)》请在冰豆网上搜索。

凯撒加密解密C语言课程设计.docx

凯撒加密解密C语言课程设计

C语言程序设计课程设计(论文)

题目凯撒加密解密课程设计

院(系):

专业班级:

学号:

学生姓名:

指导教师:

教师职称:

起止时间:

课程设计(报告)任务及评语

 

院(系):

软件学院

教研室:

软件教研窒

学号学生姓名专业班级

程序设计

(报告)

题目

凯撒加密解密课程设计

程序设计的任务与要求:

(1)掌握C语言编程的基础知识。

(2)较熟练地编写C语言应用程序。

程序设计—报告}任务

(3)了解C语言的常用标准函数、编程技巧、异常处理。

(5)联系已学过的内容,巩固所学的理论,增强独立工作能力。

(6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。

(7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。

课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。

指导教师评语及成绩

指导教师签字:

2011

年12月22日

 

第1章课程设计的目的与要求1

1.1课程设计目的1

1.2课程设计的实验环境1

1.3课程设计的预备知识1

1.4课程设计要求1

第2章课程设计内容2

2.1程序功能介绍2

2.2程序整体设计说明3

2.1设计思路3

2.2.2数据结构设计及用法说明4

2.换位解密流程图6

3.替代加密流程图7

4.替代解密流程图8

2.2.3程序结构(流程图)5

2.2.4各模块的功能及程序说明10

2.2.5程序结果10

2.3程序源代码及注释12

第3章课程设计总结18

参考资料19

第1章课程设计的目的与要求

1.1课程设计目的

本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》课程后进行的一次全面的综合练习。

本课程设计的目的和任务:

1.巩固和加深学生对C语言课程的基本知识的理解和掌握

2.掌握C语言编程和程序调试的基本技能

3.利用C语言进行基本的软件设计

4.掌握书写程序设计说明文档的能力

5.提高运用C语言解决实际问题的能力

1.2课程设计的实验环境

硬件要求能运行Windows2000/XP操作系统的微机系统。

C语言程序设计及相应的开发环境。

1.3课程设计的预备知识

熟悉C语言及C语言开发工具。

1.4课程设计要求

1.分析课程设计题目的要求

2.写出详细设计说明

3.编写程序代码,调试程序使其能正确运行

4.设计完成的软件要便于操作和使用

5.设计完成后提交课程设计报告

第2章课程设计内容

2.1程序功能介绍

文件加密与解密

(1)问题描述

1数据的输入和输出;要求使用文件操作。

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

2换位加密和解密:

加密:

根据密钥(即移位位数,用户从键盘输入)将对应字符进行移位操作,输出密文;

解密:

输入密文后再输入移位位数则可输出明文;

3凯撒加密和解密:

加密:

根据密钥(即移位位数,用户从键盘输入)将对应字符进行移位操作,输出密文;

解密:

输入密文后再输入移位位数则可输出明文;

4统计单词的个数;

5退出。

(2)功能要求

1系统以菜单方式工作;菜单形式不限。

2界面比较美观。

3要有一定的容错能力,比如说输入一个不存在的菜单项编号。

(3)算法分析

注:

(1)换位加密的原理:

它把明文中的字母重新排列,本身不变,但位置变了,换位密码是靠重新安排字母的次序,而不是隐藏他们。

首先将英文句子中的空格去除,然后将句子排成若干行,每行的字符数为换位位数,再按列输出即为密文,不足部分填入a,b,c…。

例如英文Canyoucomehere若换位位数取4,则形成矩阵

cany

ouco

mehe

reab

则密文为comraueenchayoeb,其中矩阵中的红色a和b是由于不足而填入的。

(2)替代密码原理:

通过将字母按顺序推后n位起到加密作用,如果n=3,则将字母A换作字母D,将字母B换作字母E。

X变成A,丫变成B,Z变成C,x变成a,y变成b,z变成c。

假如有这样一条指令:

Canyoucomehere

用凯撒密码加密后就成为:

FdqBrxFrphkhuh

2.2程序整体设计说明

(1)数据的输入和输出;要求使用文件操作。

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

(2)换位加密和解密:

加密:

根据密钥(即移位位数,用户从键盘输入)将对应字符进行移位操作,输出密文;

解密:

输入密文后再输入移位位数则可输出明文;

(3)凯撒加密和解密:

加密:

根据密钥(即移位位数,用户从键盘输入)将对应字符进行移位操作,输出密文;

解密:

输入密文后再输入移位位数则可输出明文;

(4)统计单词的个数;

(5)退出。

2.1设计思路

(各模块功能说明,如函数功能、入口及出口参数说明,函数调用关系描述等

这块大家问题最多了,这里不是写程序代码,而是写流程图里面各个主要函数的作用,函数之间关系的说明。

222数据结构设计及用法说明

魔方阵

(1)问题描述

把整数1到n2排成一个n沟方阵,使方阵中的每一行,每一列以及对角线上的数之和

都相同。

1n阶魔方阵的产生;生成后的魔方阵要写入文件。

2最大值的位置;

3指定行的排序,排序方法不限;

4求素数;

5求完数;

6求水仙花数;

7退出。

(2)功能要求

1系统以菜单方式工作;菜单形式不限。

2界面比较美观。

3要有一定的容错能力,比如说按行排序是输入一个不存在的行号,输入的魔方阵阶数为偶数等。

(3)算法分析

如n为奇数,魔方阵可按下述方法构成:

(1)把1填在第一行的正中间,然后填入后续的数;

(2)若数k填在第i行第j列的格子中,那么k+1应填在它的左上方,即第i-1行第j-1列的那个格子中,如果左上方无格子,即:

若i-1为0,那么填在第n行第j-1列的格子中;若j-1为0,那么填在第i-1行第n列的格子中;若i-1和j-1都为0,那么填在第n行第n列的格子中。

(3)若按

(2)的方法找到的格子中已填过数了,那么数k+1改填在第k个数的正

下方。

即填在第i+1行和第j列的那个格子中。

223程序结构(流程图)

开始

图2.2.3

1.换位加密流程图流程图

(对流程图加以说明。

可以把关键语句放在此处,加以注释说明)建立mingwen.txt和miwen.txt文件

输入密钥n

输入明文到数组r

k=strlen(r)j计算数组r长度

Ifori=0tokfputc(r[i],mingwen)将明文存放到

mingwen.txt文件中

关闭并保存mingwen.txt文件

打开mingwen.txt文件

space(h,r)将明文去空格并放到数组h中

m=strlen(h)计算数组h长度

m%n==0'

hang=m/n

hang=m/n+1j=0

for

fori=mtohang*r

i=0

tohang

for

forj=0to

h[i]='a'+j

'zl[i][j]=h[z]z++

i=0ton

j++

fori=0to

hz=0

arfgrj=oton

zl[i][j]=h[z]

厶■■

forj=0tohang

he[z]=zl[j][i]1

输出he[z]

z++

fputc(zl[j][i],miwen)

fclose()关闭并保存mingwen.txt文件

fclose()关闭并保存miwen.txt文件

清屏返回菜单

2、换位解密流程图

流程图

(对流程图加以说明。

可以把关键语句放在此处,加以注释说明)建立mingwen.txt和miwen.txt文件

输入密钥n

输入明文到数组r

k=strlen(r)j计算数组r长度

1fori=0tok

fputc(r[i],miwen)将密文存放到

miwen.txt文件中

关闭并保存miwen.txt文件

打开miwen.txt文件

space(h,r)将明文去空格并放到数组h中

m=strlen(h)计算数组h长度

m%n==O

 

hang=m/nhang=m/n+1j=0

fori=0toni=mtohang*n

he[z]=zl[j][i]输出he[z]

z++

fputc(zl[j][i],mingwen)

fclose(mingwen)件

关闭并保存mingwen.txt文

fclose(miwen)

关闭并保存miwen.txt文件

清屏返回菜单

3.替代加密流程图

 

流程图

(对流程图加以说明。

可以把关键语句放在此处,加以注释说明)

建立mingwen.txt和miwen.txt文件

ch=getchar()接收回车字符

Ch=getchar()开始输入明文

当c

h!

='\n'

fputc(ch,mingwen)将明文放到

mi=gwehax()文件中

fclose(mingwen))关闭并保存

mingwen.txt文件

输入密钥

直到!

(i>=0&&i<=26)成立

打开mingwen.txt文件

ch=fgetchar(mingwen)开始从明文中读出字符

当ch!

=EOF

(ch>='a*&&cfi<=^z:

)l|(Gh>='A'&&ch<='Z:

/

ch=ch+i;

ch=ch-26

fputc(ch,miwen)

输出ch

ch=fgetc(mingwen)

fclose(mingwen)关闭并保存mingwen.txt文

fclose(miwen);关闭并保存miwen.txt文

清屏返回菜单

4.替代解密流程图

流程图

(对流程图加以说明。

可以把关键语句放在此处,加以注释说明)建立mingwen.txt和miwen.txt文件

ch=getchar()接收回车字符

Ch=getchar()开始输入明文

当c

h!

='\n'

fputc(ch,mingwen)将明文放到

mi=gwtchax()文件中

fclose(mingwen))关闭并保存

mingwen.txt文件

输入密钥i

直到!

(i>=0&&i<=26)成立

打开mingwen.txt文件

ch=fgetchar(mingwen)开始从明文中读出字符

当ch!

=EOF

:

>=a&&a<^:

:

/

ch=ch+i;

ch=ch+26

fputc(ch,mingwen)

输出ch

ch=fgetc(miwen)

fclose(mingwen)关闭并保存mingwen.txt文

fclose(miwen);关闭并保存miwen.txt文

清屏返回菜单

224各模块的功能及程序说明

1文件操作时打开的文件应该及时关闭,不然不会保存,在下次打开时就读不到以前存放在该文件里面的数据,而编译时却不会提示有错误。

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

3.空格的去除;采用指针的方法将去除空格的字符串放到另一个数组中菜单函数的

容错;用default:

system("cls");caidan();实现。

加密解密后返回主菜单;在每个函数后面加ch=getchar();ch=getchar();system("cls");caidan();第一个h=getchar()接收回车

字符,第二个ch=getchar()使屏幕上的显示暂停,并实现返回主菜单的操作。

2.2.5程序结果

1:

换位加密源码:

Ceshijieguo

密钥:

4

运行结果:

Cigejusiohea

"C:

\U5e说Admini?

tr^tor\De

请输入密钥

I请输入明文

Cesltiji_egnn

Cigejusiohea

密究也可查

-Center键返回主菜单

2换位解密

源码:

Cigejusiohea密钥:

4

运行结果:

Ceshijieguoa

文oh

人.晋疋iJ输沪文"请4请ci明ICG

 

 

3凯撒加密

源码:

Ceshijieguo密钥:

4

运行结果:

Giwlmnmikys

*'CAUser^\Administr-ator\Des

Ceshijiequo

请蔬人密钥(旷

4

密文是;_

Giwinnnikys

花也口Sl^miwen.txt

回主菜单

4:

凯撒解密

源码:

Giwlmnmikys

密钥:

4

运行结果:

Ceshijieguo

"CAUser^Administratcir\D"b

请输入密文

Giulmnnikys

请编人密钿〔旷“)

明文是:

Ce£hiji^guo

明也可查看m>n9uen-txt

按酱ntei*键返回壬菜单

5.明文统计

'C:

\User5\Adminisirdto-r\C

6.密文统计

'C:

\User^XAdministratob

苕文中有4个单词。

安"饥丁建逍向主菜单

2.3程序源代码及注释

此处需要些出你的源程序代码,以及对主要代码的一些功能或作用说明。

#include

#include

#include

chara[]={"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()

{chartc;

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确定请按丫,取消请按N\n\n");

printf("\t\t********************************************\n")・

tc=getchar();

tc=getchar();

if(tc=='n'||tc=='N')

{

system("cls");

caidan();

}

elseif(tc=='y'||tc=='Y')

{

system("cls");

byebye();

}

else

{system("cls");

tuichu();

}

}

char*space(char*a,char*b)//去空格

{

char*c=a;

intn=0;

while(*b!

='\0')

{

if(*b!

='')

{

*c=*b;

n++;

c++;

}

b++;

}

*c='\0';

}

transpen()//换位加密

{

FILE*mingwen,*miwen;

inti,j,n,m,k,z=0,hang;

charch;

charr[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(O);

}

printf("请输入密钥\n");

seanf("%d",&n);

printf("请输入明文\n");

ch=getchar();

gets(r);

k=strlen(r);

for(i=0;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

{

for(j=0;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

{

for(j=0;j

{

zl[i][j]=h[z];

z++;

}

}

}

z=0;

for(i=0;i

for(j=0;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();

}

caesaren()//凯撒加密

{

FILE*mingwen,*miwen;

charch;

inti;

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");

seanf("%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;

charch;

inti;

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||chv'A')

ch=ch+26;

}

fputc(ch,mingwen);

printf("%c",ch);

ch=fgetc(miwen);

}

fclose(mingwen);

fclose(miwen);

printf

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1