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

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

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

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

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

密钥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

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

cqrb!

rb!

j!

bnlanc;

输入需要解密的密文如:

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

3.轮转法:

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

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

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

iasngovtlttesiclusteeaodtcuwnweolps;

解密过程:

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

icbca

ccoun

tnumb

eris

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

4.维吉利亚密码:

假设明文m=m1m2m3…mn;

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!

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

"

,同时输入密钥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<

iostream>

string>

ctype.h>

conio.h>

stdlib.h>

usingnamespacestd;

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

charmingwen[MING_WEN];

//存放明文

charmiwen[MING_WEN];

//存放密文

charmiyuejvzi[100];

//密钥句子

charalphabeta[27];

//代换字母表

stringstr="

abcdefghijklmnopqrstuvwxyz"

;

//产生密文

voidCreate_miyuejvzi(char);

voidmain()

{

intchoice;

printf("

\n"

);

//起始输出界面

-----------------------------------------\n"

信息管理与信息系统**班\n\n"

**学号:

0120903490**\n"

while

(1)/*循环测试*/

{

printf("

\n"

*****************************************\n"

|加密解密方法\n"

|1、凯撒密码\n"

|2、单表置换\n"

|3、维吉利亚密码\n"

|4、轮换法\n"

|5、退出\n"

----------------------------------------\n"

请输入1--5进行选择:

scanf("

%d"

&

choice);

while(choice>

5||choice<

=0)//如果输入数字不符要求,重新输入,直至正确为止

{

printf("

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

scanf("

}

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

case1:

_kaisa();

break;

//凯撒密码

case2:

_danbiaozhihuan();

//单表置换密码

case3:

_weijiliya();

//维吉利亚密码

case4:

_lunhuan();

//轮换法

case5:

exit(0);

//退出程序

system("

pause"

/*暂停*/

cls"

/*清屏*/

}

}

//凯撒密码

void_kaisa()

do

CLS"

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

\t\t\t1.加密\n\t\t\t2.解密\n\t\t\t3.退出\n"

____________________________________________________________________\n"

%15c"

'

'

注:

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

%19c"

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

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

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

getchar();

if(choice==1)

kaisa_en();

break;

elseif(choice==2)

{

kaisa_de();

elseif(choice==3)

\n%33c"

3:

退出\n"

exit(0);

else

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

getchar();

system("

}while(choice!

=1||choice!

=2);

//凯撒加密

voidkaisa_en()//加密

intleng,i,miyue;

charchc[MING_WEN],chp[MING_WEN];

请输入你要加密的明文:

%28c"

gets(chc);

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

scanf("

miyue);

leng=strlen(chc);

密文:

for(i=0;

i<

leng;

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;

elseif(islower(chc[i]))

z'

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

//凯撒解密

voidkaisa_de()//解密

请输入你要解密的密文:

明文:

if(chc[i]-miyue<

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

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

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

)//遇到-1为字母时的处理

chp[i]-=26;

elseif(chp<

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

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

/////单表置换加密

void_danbiaozhihuan()

{

system("

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

if(choice==1)

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

MING_WEN);

gets(mingwen);

你输入的明文是:

%s\n"

mingwen);

intmingwen_length=strlen(mingwen);

//明文长度

dbzh_alphabeta();

dbzh_en();

if(choice==2)

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

gets(miwen);

你输入的密文是:

miwen);

intmiwen_length=strlen(miwen);

//密文长度

dbzh_de();

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

voiddbzh_alphabeta()

inti,j;

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

gets(miyuejvzi);

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

%s"

miyuejvzi);

intlength=strlen(miyuejvzi);

intpos=0;

//指示填充位置

inttag=1;

//

alphabeta[0]=miyuejvzi[0];

//填充第0个位置

for(i=1;

length;

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];

26;

i++)//把英文字母表中还没有出现在代换字母表中的字母存入代换字母表

{

tag=1;

for(j=0;

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

tag=0;

break;

if(tag==1)

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

cout<

<

原始字母表为"

str<

endl;

代换密码表为"

alphabeta<

//单表置换加密

voiddbzh_en()//产

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

当前位置:首页 > 经管营销 > 金融投资

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

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