数据加密(数据结构课设)_第1页
数据加密(数据结构课设)_第2页
数据加密(数据结构课设)_第3页
数据加密(数据结构课设)_第4页
数据加密(数据结构课设)_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

成绩评定表

学生姓名李林班级学号1203050134

专业计算机科学与技术课程设计题目数据加密

组长签字:

成绩

日期2013年12月30日

课程设计任务书

学院信息科学与工程学院专业计算机科学与技术

学生姓名李林班级学号1203050134

课程设计题目数据加密

实践教学要求与任务:

任务:

编写一个程序可以对数据进行加密和解密的功能。并且将明文加密后别存入文件

中;还要将密文文件解密后存入另一文件中;还有将明文中的某字符U替换为V时,

同时将密文中的字符做相应修改。

要求:1.设计数据结构,存储结构;

2.在c兼容环境完成上述题目的代码编写与调试;

3.程序运行界面交互性好;

4.软件运行,给出测试数据。

工作计划与进度安排:

数据结构课程设计时间安排在教学第17周、第18周内完成,按上述题目要求完

成查阅资料、程序设计、调试、运行等工作。

时间安排如下:

1、查阅资料、与初步设计;卜2天

2、整体功能设计、代码编码与初步调试。1-3天

3、调试和软件功能的测试和验收。1-3天

4、答辩与论文撰写。1-2天

指导教师:专业负责人:学院教学副院长:

2013年12月10日2013年12月10日2013年12月10日

目录

一、题目概述(内容及要求)...............................4

二、功能分析.............................................4

三、设计.................................................8

四、运行与测试..........................................15

五、总结.................................................18

参考文献.................................................18

一、题目概述(内容及要求)

设明文P=POP1P2…Pn和密钥K=KOK1K2…Km(n>=m)中的字符Pi(l<=i<=n)或Kj(l<=j<=m)

的ASCH为00~7FH,用密钥K对明文P进行加密得到密文CX0C1C2…Cn,用密钥K对

密文C解密得到明文P。

加密:[Ci=Pi+Kj(j=imod(m+1))(当Ci<=7FH)

-Ci=Pi+Kj-80H(j=imod(m+D)(当Ci〉7FH)

解密:Pi=Ci-Kj(j=imod(m+1))(当Ci>=Kj)

.Pi=Ci-Kj+80H(j=imod(m+1))(当Ci〈Kj)

要求:

①将明文加密后别存入文件中

②将密文文件解密后存入另一文件中

③将明文中的某字符u替换为v,同时将密文中的字符做相应修改。

二、功能分析

1.功能模块

该程序的功能模块如图2T所示

图2-1功能模块图

2.加密功能流程图

运行加密功能如图2-2所示

图2-2加密程序功能流程图

3.解密功能流程图

运行解密功能如图2-3所示

开始

输入C

图2-3解密程序功能流程图

4.查找修改功能流程图

运行修改明文字符修改功能如图2-4所示

图2-4查找程序功能流程图

三、设计

#include<iostream>

#include<fstream>

#include<stdlib.h>

#include<string.h>

usingnamespacestd;

ttdefineN6〃定义N的大小

ttdefineM5//定义M的大小,N>二M

charP[N]={0};〃定义明文数组

charK[M]={0};〃定义密钥数组

charC[N]={0};〃定义密文数组

inti,j;〃定义循环变量

intk;〃定义开关控制变量

〃数据加密解密的实现

voidencrypt(charp[N])〃加密!

{

for(i=0;i<N;i++)

{

inta;〃定义局部容器变量,用于字符与整型数之间转换

j=i%M;

a=(int)p[i]+(int)K[j];

if(a>127)//7F=127

(

//C[ent]=PLent]+K[i%(j+1)]-128;//Ci=Pi+Kj-80H(j=imod(m+1))(当

Ci>7FH)

a=a-128;

C[i]=(char)a;

)

else

(

//C[ent]=P[ent]+KEi%(j+1)];//Ci=Pi+Kj(j=imod(m+1))(当Ci<=7FH)

C[i]=(char)a;

)

)

)

voiddecode(charc[N])〃解密!

for(i=0;i<N;i++)

j=i%M;

if(c[i]<KLjl)

(

P[i]=c[i]-K[j]+128;//80H=128,Pi=Ci-Kj+80H(j=imod(m+l))(当

Ci<Kj)

)

else

(

P[i]=c[i]-K[j];//Pi=Ci-Kj(j=imod(m+1))(当Ci>=Kj)

)

〃文件操作

voiddeposit(stringa,charc[N],chark[M])〃文件存入

(

ofstreamfile;

file,open(a,ios::out);

file«c«endl«k«endl;

file,close();

)

voidread(stringa)〃文件读取

{

ifstreamfile;

file,open(a,ios:;in);

while(file,good())

cout<<(char)file.get();

file,close();

}

charseek(chara,chard,charb[N])//查找

(

k=0;

for(i=0;i<N;i++)

{

if(b[i]==a)

(

b[i]=d;

j=1;

)

else

j=0;

)

k=(k|j);

)

if(k==0)

(

cout<<"\n\n\t\t不存在该字符"<<endl;

)

return*b;

voidlength(char*object,ints)〃计算长度

(

intlength=strlen(object);

if(length!=s)

(

cout<〈"你输入的字符串长度有误,请重新输入"endl;

j=0;

}

else

j=1;

〃用户操作界面

voiddisplaystr。//初始界面

{

cout<<"\n\n\t\tl.用户输入密钥或者更改密钥"<<endl;

cout<<"\n\t\t2.加密操作"<<endl;

cout«w\n\t\t3.解密操作"〈<endl;

cout<<"\n\t\t4.修改明文中的某个字符重新加密”<<endl;

cout<<"\n\t\t5.修改密文中的某个字符重新解密”《endl;

cout<<"\n\t\t6.打印加密规则"<<endl;

cout«"\n\t\t7.退出...”<<endl;

cout<<"\n\n\n\n\t\t请输入菜单编号:1,2,3,4,5,6或7"<<endl;

intselect(int*v)〃选择菜单

(

displaystr();

ints;

cin>>s;

fflush(stdin);〃清空输入缓存

system(,ZCLS/Z);

switch(s)

case1:{

cout<<〃\n\n\n\n\t\t请输入密钥(一共〃<<M<<〃个字符):〃;

cin»K;

length(K,M);

while(j)

(

system(〃CLS〃);

cout<<〃\n\n\n\t\t密钥修改成功!按任意键返回起始页〃*

endl;

j=0;

)

system("PAUSE");

system(,ZCLS,Z);

return*v=1;

)

case2:{

if(K[0]二二0)

{

cout<X〃\n\n\n\t\t你还没有输入密钥,请返回输入〃《endl;

j=0;

)

else

j=1;

while(j)

{

cout«〃\n\n\n\n\t\t请输入要加密的明文(一共〃<<N«

个字符):〃;

cin»P;

length(P,N);

while(j)

(

system(,ZCLS,Z);

encrypt(P);

stringx=〃力口密〃;

deposit(x,C,K);

cout«-----------------加I密成功

-----------------〃«endl;

cout«〃\n\n\n\n\t\t加密该明文的密钥为:〃<<K«

〃\n\n\n\t\t加密后的密文为:〃<<C<<〃\n\n\n\t\t按任意键返回起始页〃«endl;

j=o;

)

system("PAUSE");

system("CLS");

return*v=1;

}

case3:{

if(K[0]==0)

(

cout<X"\n\n\n\t\t你还没有输入密钥,请返回输入"<<endl;

j=0;

}

else

j=1;

while(j)

(

cout<<"\n\n\n\n\t\t请输入要解密的密文(一共"<<N«"

个字符):”;

cin»C;

length(C,N);

while(j)

(

system(Z,CLS,/);

decode(C);

stringy="解密";

deposit(y,P,K);

cout«"\n\n\n\t\t-----------------解密成功

-----------------"«endl;

cout«"\n\n\n\n\t\t解密该密文的密钥为:”«K«

"\n\n\n\t\t解密后的明文为:"«P«"\n\n\n\t\t按任意键返回起始页“«endl;

j=0;

)

)

system("PAUSE");

system("CLS");

return*v=1;

)

case4:{

if(P[0]==0)

cout«"\n\n\n\t\t你还没有输入明文,请返回输入"<<endl;

j=0;

)

else

j=1;

while(j)

(

cout<<〃\n\t\t请输入要修改的字符:〃<<endl;

charq,o;

cin>>q;

fflush(stdin);〃清空输入缓存

cout«〃\n\n\t\t修改为"<<endl;

cin»o;

fflush(stdin);〃清空输入缓存

*P=seek(q,o,P);

while(k)

(

cout«〃\n\n\t\t字符修改成功!〃«endl;

system(,,PAUSE,Z);

system(〃CLS〃);

encrypt(P);

stringx=〃加密〃;

deposit(x,C,K);

k=0;

cout«〃\n\n\n\t\t-----------------重新加密成功

-----------------〃«endi;

cout〃\n\n\n\n\t\t加密该明文的密钥为:〃«K«

〃\n\n\n\t\t加密后的密文为:〃"C<<〃\n\n\n\t\t按任意键返回起始页〃«endl;

}

j=0;

}

system(,,PAUSE,Z);

system(〃CLS〃);

return*v=1;

)

case5:{

if(C[0]==0)

{

cout<<〃\n\n\n\t\t你还没有输入密文,请返回输入〃<Xendl;

j=0;

)

else

j=1;

while(j)

{

cout<<〃\n\t\t请输入要修改的字符:〃<<endl;

charq,o;

cin»q;

fflush(stdin);〃清空输入缓存

cout<<〃\n\n\t\t修改为〃<<endl;

cin»o;

fflush(stdin);〃清空输入缓存

*C=seek(q,o,C);

while(k)

(

cout«〃\n\n\t\t字符修改成功!〃«endl;

system(,,PAUSE,/);

system(〃CLS〃);

decode(C);

stringy=〃解密〃;

deposit(y,P,K);

k=0;

cout«z/\n\n\n\t\t-------------解密成功

〃<<endl;

cout«〃\n\n\n\n\t\t解密该密文的密钥为:〃<<K«

〃\n\n\n\t\t解密后的明文为:〃"P<<〃\n\n\n\t\t按任意键返回起始页〃<<endl;

}

j=0;

}

system("PAUSE");

system(〃CLS〃);

return*v=1;

)

case6:{

stringz=〃加密规则〃;

read(z);

cout<<〃\n\n"<<"\n\n\n按任意键返回起始页〃<<endl;

system("PAUSE");

system(/ZCLS,Z);

return*v=1;

)

case7:return*v=0;

default:{

cout<<〃\n\n\n\n\t\t输入菜单错误,请重新输入\n\n按任意键返回

起始页〃endl;

system("PAUSE");

system(〃CLS〃);

return*v=1;

)

)

voidmainO

(

intv=1;

while(v)

(

select(&v);

四、运行与测试

点击开始调试,跳出初始界面图。按界面中的给出的菜单进行相应的输入,运行

相应的功能。最后一个功能是推出该程序。如图4T

图4-1程序运行界面图

输入菜单1,运行输入密钥功能。最后输入成功返回初始界面。如图4-2

图4-2键入密钥图

输入菜单2,运行加密功能。程序先接收了输入的明文进行加密。然后输出加密

后的密文和加密的密钥,并把这两个信息输出到加密文件中。最后提示成功返回

初始界面。如图4-3

图4-3加密功能图

输入菜单3,运行解密功能。程序先接收了输入的密文进行解密。然后输出解密

输入菜单4,运行查找修改图*4解苗功目匕图功能。先输入需要修改的明

文字符,再输入想要修改成的字符。然后进行查找并修

改,再用修改后的明文运行加密功能。最后提示成功返回初始界面。如图4-5

图4-5修改字符重加密图

输入菜单6,运行输出规则功能。程序读取了加密规则文件中的所有字符并输出

到程序界面里。如图4-6

D:\®Jff\visualstudio201力口颈Debug\^S^力口密.exe

h§;Q^^P=P0PlP2••Pn^Q^^K=K0KlK2-Kin<n>=n

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论