《MIS系统软件》实验报告操作系统.docx

上传人:b****5 文档编号:6805131 上传时间:2023-01-10 格式:DOCX 页数:47 大小:344.37KB
下载 相关 举报
《MIS系统软件》实验报告操作系统.docx_第1页
第1页 / 共47页
《MIS系统软件》实验报告操作系统.docx_第2页
第2页 / 共47页
《MIS系统软件》实验报告操作系统.docx_第3页
第3页 / 共47页
《MIS系统软件》实验报告操作系统.docx_第4页
第4页 / 共47页
《MIS系统软件》实验报告操作系统.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

《MIS系统软件》实验报告操作系统.docx

《《MIS系统软件》实验报告操作系统.docx》由会员分享,可在线阅读,更多相关《《MIS系统软件》实验报告操作系统.docx(47页珍藏版)》请在冰豆网上搜索。

《MIS系统软件》实验报告操作系统.docx

《MIS系统软件》实验报告操作系统

学生学号

0120903490***

实验课成绩

学生实验报告书

 

实验课程名称

MIS系统软件

开课学院

管理学院

指导教师姓名

***

学生姓名

**

学生专业班级

 

2011

--

2012

学年

学期

 

实验项目名称

加密解密算法

实验成绩

实验者

**

专业班级

信管0901班

组别

同组者

实验日期

2012年03月07日

第一部分:

实验预习报告

1、实验目的、意义

通过简单的加密解密算法的实现理解系统中加密解密的基本思想,熟练掌握使用C语言基本语句。

2、实验基本原理与方法

①单字母替换加密方法——恺撒密码

加密方法是把英文字母按字母表的顺序编号作为明文,将密钥定为m,加密算法为将明文加上密钥m,得到密码表,通过相反的过程由密文得到明文。

②单字母替换加密方法——单表置换密码

由密钥Key构造字符置换表,完成加密和解密过程。

③多字母替换加密方法——维吉利亚密码

假设明文m=m1m2m3…mn;密钥k=k1k2k3…kn,对应密文c=c1c2c3…cn,密文为:

ci=(mi+ki)mod26,26个字母的序号依次为0~25,ci,mi,,ki是分别是密文明文密钥中第i个字母的序号。

④转换加密方法

通过将明文每m个字符一组按顺序分为若干个字符串,再按照先列后行形成密文,并分析给出解密的方法。

或者通过给出一个密钥字符串,将明文按密钥字符串长度按顺序分为若干组字符串,再按照密钥字符串各个字符的顺序形成密文,并分析给出解密的方法。

3、主要仪器设备及耗材

实验室提供计算机和上网条件,C语言上机环境。

4、实验方案与技术路线(综合性、设计性实验)

第二部分:

实验过程记录

实验原始记录(包括实验数据记录,实验现象记录,实验过程发现的问题等)

1.单表置换:

先选定一个单词,例如BEIJINGTSINGHUA,然后将它排列在密码对照表(两行26列第一行存a到z的字母,第二行存对照的密码)下方,重复出现的字母以第一次现时对应的明文字母为准;后面以该单词中未出现的字母按顺序排列备齐,生成一个密码,然后可以用此密码本进行加密或解密。

加密过程:

首先输入加密明文如important,然后输入密钥如BEIJINGTSINGHUA。

再然后建立临时密码表如下:

(上一行是字母,下一行是密码)

之后,将important对照第一行的相应密匙如i对应H,依次输出。

结果应为HDLKOQBFQ;

解密过程:

首先输入密文如HDLKOQBFQ,然后输入密匙BEIJINGTSINGHUA。

同理加密过程,可以对照密码表依次找到密文中对应的原文。

结果应为important。

2.凯撒密码:

把英文字母按字母表的顺序编号作为明文,将密钥定为m,加密算法为将明文加上密钥m,得到密码表,通过相反的过程由密文得到明文。

加密过程:

首先输入明文为Thisisasecret,然后输入密钥9,之后同样会形成两行对应的同1方法一样的密码表:

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

之后,将自动输出加密后的密文,结果为:

cqrb!

rb!

j!

bnlanc;

解密过程:

输入需要解密的密文如:

cqrb!

rb!

j!

bnlanc,然后输入密钥9(为简便起见,同加密过程使用同样的密钥),则得到加密过程中的同样密码表,然后依次对应输出原文,结果为Thisisasecret。

3.轮转法:

通过将明文每m个字符一组按顺序分为若干个字符串,再按照先列后行形成密文,并分析给出解密的方法。

加密过程:

首先输入明文itcanallowstudentstogetcloseupviews,然后输入密匙5,之后输入的明文会按照每行3个字符的形式进行排列,如此例中形成如下的排列:

之后,输出加密后的密文则使用先列后行的方法,此例结果为:

iasngovtlttesiclusteeaodtcuwnweolps;

解密过程:

首先输入密文icteccnrbouicumsanb,然后输入密匙5,之后同样会将输入的密文按照每行3个字符的形式排列,形成如下排列:

icbca

ccoun

tnumb

eris

之后,输出解密后的明文使用先列后行的方法,此例结果为icbcaccountnumberis。

4.维吉利亚密码:

假设明文m=m1m2m3…mn;密钥k=k1k2k3…kn,对应密文c=c1c2c3…cn,密文为:

ci=(mi+ki)mod26,26个字母的序号依次为0~25,ci,mi,,ki是分别是密文明文密钥中第i个字母的序号。

(如下图)

加密过程:

首先输入明文如information,然后输入密匙如star,第一个字符的密文可以求得c1=(w+i)mod26=4,,此时对应编号4的字母为E,则明文W对应的密文为E,依次类推,可以将所有明文加密得到密文:

AGFFJFAKAHN;

解密过程:

首先输入密文esioqgm,然后输入与密文字符数相等的密匙如iloveyu,将加密过程的原理反过来运用,如第一个密文字符为E,则对应的编号为4,然后求的明文为W,依次类推,求得明文为:

whutmis。

第三部分结果与讨论(可加页)

实验结果分析(包括数据处理、实验现象分析、影响因素讨论、综合分析和结论等)

程序设计类实验:

包括原程序、输入数据、运行结果、实验过程发现的问题及解决方法等;

分析与设计、软件工程类实验:

编制分析与设计报告,要求用标准的绘图工具绘制文档中的图表。

系统实施部分要求记录核心处理的方法、技巧或程序段;

其它实验:

记录实验输入数据、处理模型、输出数据及结果分析

运行结果分析:

在vc++6.0的编译环境下,点击运行后出现加密算法选择的界面:

(1)凯撒密码

选择1后回车,阅读完介绍性文字后,再接着选择1进行对输入字符串进行加密(例如输入字符串"******'sbirthdayis",接着输入密钥7):

得到密文:

govbephv(z!

ipyaokhf!

pz!

此时我为了对一段字符串进行凯撒解密"govbephv(z!

ipyaokhf!

pz!

",同时输入密钥7,同样会得到加密前的明文:

(2)单表置换密码

按照提示,回车后又进入加密算法选择主界面,此时选择2.单表置换密码,加密下面一句话todayisapril1,2012,namelyAprilfool'sday:

得到密文pjuzvenzkmed1,2012,gzfxdvAkmedijjd'nuzv,(没有处理空格及标点符号等特殊字符,但加密效果已有)。

为了证明对应的解密是否正确,现进行解密环节,把刚才密文解密,从截图中可以看到当时加密使用的密钥时zhouxiaoyeah

解密后的字符串跟之前原明文完全一样。

(3)维吉利亚密码

维吉利亚密码由于需要产生一个维吉利亚字母代换表,此处为了学习方便,在程序运行过程中特意将该表也打印到了屏幕:

输入明文:

guoqingjiekuaile,密钥:

whutms(此例为课件上一例子)

选择解密过程,帮刚才的密文重新翻译成明文:

(4)轮换算法

主要函数介绍

凯撒密码:

voidkaisa_de();//解密

voidkaisa_en();//加密

void_kaisa();调用上面两个子函数

单表置换加密:

voiddbzh_alphabeta();//产生代换字符表

voiddbzh_en();//产生密文,即加密

voiddbzh_de();//产生明文,即解密

void_danbiaozhihuan();被main()调用,运行时根据选择调用上面的三个函数

维吉利亚密码:

voidwjly_en();维吉利亚加密函数

voidwjly_de();解密函数

int_weijiliya();调用加密解密函数

轮换法加密:

voidlunhuan_en();

voidlunhuan_de();

void_lunhuan();

实验中的问题

(1)各个加密函数之间的基本上完全独立,内部定义了太多的自己变量,从空间上看运行起来占用空间较大。

可以尝试定义几个全局变量,让他们共用。

如输入的密文,密钥,产生的明文等等。

(2)操作不够人性化。

由于时间的原因,没有在程序的界面上话太多工夫,比如运行完加密或者解密过程后,该转到第一个主界面(四个加密算法的选择界面)还是仍然留在当前密码方法的界面,退出时时直接退出控制台程序还是退出到开始界面。

此外,程序的容错处理还不完善,一下非法输入还不能很友好的处理。

操纵的人性化

 

四种加密算法源代码:

#include

#include

#include

#include

#include

usingnamespacestd;

#defineMING_WEN1000//设明文长度最大为1000

charmingwen[MING_WEN];//存放明文

charmiwen[MING_WEN];//存放密文

charmiyuejvzi[100];//密钥句子

charalphabeta[27];//代换字母表

stringstr="abcdefghijklmnopqrstuvwxyz";

voidkaisa_de();//解密

voidkaisa_en();//加密

void_kaisa();

voiddbzh_alphabeta();//产生代换字符表

voiddbzh_en();//产生密文

voiddbzh_de();//产生密文

void_danbiaozhihuan();

voidwjly_en();

voidwjly_de();

voidCreate_miyuejvzi(char);

int_weijiliya();

voidlunhuan_en();

voidlunhuan_de();

void_lunhuan();

voidmain()

{

intchoice;

printf("\n");//起始输出界面

printf("-----------------------------------------\n");

printf("信息管理与信息系统**班\n\n");

printf("**学号:

0120903490**\n");

while

(1)/*循环测试*/

{

printf("\n");

printf("*****************************************\n");

printf("\n");

printf("|加密解密方法\n");

printf("\n");

printf("|1、凯撒密码\n");

printf("|2、单表置换\n");

printf("|3、维吉利亚密码\n");

printf("|4、轮换法\n");

printf("|5、退出\n");

printf("----------------------------------------\n");

printf("请输入1--5进行选择:

");

scanf("%d",&choice);

while(choice>5||choice<=0)//如果输入数字不符要求,重新输入,直至正确为止

{

printf("\n请输入选项前面的编号:

");

scanf("%d",&choice);

}

switch(choice)//调用不同的解密加密算法

{

case1:

_kaisa();break;//凯撒密码

case2:

_danbiaozhihuan();break;//单表置换密码

case3:

_weijiliya();break;//维吉利亚密码

case4:

_lunhuan();break;//轮换法

case5:

exit(0);//退出程序

}

system("pause");/*暂停*/

system("cls");/*清屏*/

}

}

//凯撒密码

void_kaisa()

{

intchoice;

do

{

system("CLS");

printf("\n");

printf("\t\t凯撒加密\n\t\t\t请选择操作:

\n");

printf("\t\t\t1.加密\n\t\t\t2.解密\n\t\t\t3.退出\n");

printf("____________________________________________________________________\n");

printf("%15c",'');

printf("注:

----恺撒密码按c=(m+9)%%26加密----\n");

printf("%19c",'');

printf("----除字母其他字符均按c=(m+1)%%26加密----\n");

printf("%19c",'');

printf("----当其他其它字符+1为字母时+26跳过字母加密----\n");

printf("%19c",'');

printf("----当其他其它字符+1超出ASCII码表示范围时-128循环表示----\n");

scanf("%d",&choice);

getchar();

if(choice==1)

{

kaisa_en();

break;

}

elseif(choice==2)

{

kaisa_de();

break;

}

elseif(choice==3)

{

printf("\n%33c",'');

printf("3:

退出\n");

exit(0);

}

else

{

printf("输入错误,按任意键继续:

\n");

getchar();

system("cls");

}

}while(choice!

=1||choice!

=2);

}

//凯撒加密

voidkaisa_en()//加密

{

intleng,i,miyue;

charchc[MING_WEN],chp[MING_WEN];

printf("请输入你要加密的明文:

\n");

printf("%28c",'');

gets(chc);

printf("请输入密钥(如数字9):

");

scanf("%d",&miyue);

leng=strlen(chc);

printf("%28c",'');

printf("密文:

\n");

printf("%28c",'');

for(i=0;i

{

if(isupper(chc[i]))

{

if(chc[i]+miyue>'Z')

{

chp[i]=chc[i]+miyue-26;

printf("%c",chp[i]);

}

else

{

chp[i]=chc[i]+miyue;

printf("%c",chp[i]);

}

}

elseif(islower(chc[i]))

{

if(chc[i]+miyue>'z')

{

chp[i]=chc[i]+miyue-26;

printf("%c",chp[i]);

}

else

{

chp[i]=chc[i]+miyue;

printf("%c",chp[i]);

}

}

else

{

chp[i]=chc[i]+1;

if(chp[i]=='A'||chp[i]=='a')//遇到+1为字母时的处理

chp[i]+=26;

elseif(chp[i]>127)//遇到+1超出ASCII码表示范围时

chp[i]=char(chp[i]-128);

printf("%c",chp[i]);

}

}

printf("\n");

}

//凯撒解密

voidkaisa_de()//解密

{

intleng,i,miyue;

charchc[MING_WEN],chp[MING_WEN];

printf("请输入你要解密的密文:

\n");

printf("%28c",'');

gets(chc);

printf("请输入密钥(如数字9):

");

scanf("%d",&miyue);

leng=strlen(chc);

printf("%28c",'');

printf("明文:

\n");

printf("%28c",'');

for(i=0;i

{

if(isupper(chc[i]))

{

if(chc[i]-miyue<'A')

{

chp[i]=chc[i]-miyue+26;

printf("%c",chp[i]);

}

else

{

chp[i]=chc[i]-miyue;

printf("%c",chp[i]);

}

}

elseif(islower(chc[i]))

{

if(chc[i]-miyue<'a')

{

chp[i]=chc[i]-miyue+26;

printf("%c",chp[i]);

}

else

{

chp[i]=chc[i]-miyue;

printf("%c",chp[i]);

}

}

else

{

chp[i]=chc[i]-1;

if(chp[i]=='Z'||chp[i]=='z')//遇到-1为字母时的处理

chp[i]-=26;

elseif(chp<0)//遇到-1超出ASCII码表示范围时

chp[i]=char(chp[i]+128);

printf("%c",chp[i]);

}

}

printf("\n");

}

/////单表置换加密

void_danbiaozhihuan()

{

system("CLS");

intchoice;

printf("\n");

printf("\t\t单表置换加密\n\t\t\t请选择操作:

\n");

printf("\t\t\t1.加密\n\t\t\t2.解密\n\t\t\t3.退出\n");

scanf("%d",&choice);

if(choice==1)

{

printf("请输入你想加密的字符串(请不要超出%d个字符,不能输入中文):

",MING_WEN);

getchar();

gets(mingwen);

printf("你输入的明文是:

%s\n",mingwen);

intmingwen_length=strlen(mingwen);//明文长度

dbzh_alphabeta();//产生代换字符表

dbzh_en();//加密

}

if(choice==2)

{

printf("请输入你想解密的字符串:

");

getchar();

gets(miwen);

printf("你输入的密文是:

%s\n",miwen);

intmiwen_length=strlen(miwen);//密文长度

dbzh_alphabeta();//产生代换字符表

dbzh_de();

}

}

//单表置换产生代换字符表

voiddbzh_alphabeta()

{

inti,j;

printf("请输入密钥句子,至少为1个字符,最多100个字符,且第一个字符必须是小写字母:

\n");

gets(miyuejvzi);//输入的密钥句子,至少为1个字符,最多100个字符,且第一个必须为字母

printf("%s",miyuejvzi);

intlength=strlen(miyuejvzi);

intpos=0;//指示填充位置

inttag=1;//

alphabeta[0]=miyuejvzi[0];//填充第0个位置

for(i=1;i

{

if(isalpha(miyuejvzi[i])!

=0)//是字母

{

tag=1;

for(j=0;j<=pos;j++)

{

if(alphabeta[j]==miyuejvzi[i])//alphabet表中已经存在字母miyuejvzi[i]

{

tag=0;

break;

}

}

if(tag==1)

alphabeta[++pos]=miyuejvzi[i];

}

}

for(i=0;i<26;i++)//把英文字母表中还没有出现在代换字母表中的字母存入代换字母表

{

tag=1;

for(j=0;j<=pos;j++)

{

if(alphabeta[j]==str[i])//alphabet表中已经存在英文字母表中的第i个字母

{

tag=0;

break;

}

}

if(tag==1)

alphabeta[++pos]=str[i];

}

cout<<"原始字母表为"<

cout<<"代换密码表为"<

}

//单表置换加密

voiddbzh_en()//产

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

当前位置:首页 > 医药卫生 > 基础医学

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

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