《MIS系统软件》实验报告操作系统.docx
- 文档编号:6805131
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:47
- 大小:344.37KB
《MIS系统软件》实验报告操作系统.docx
《《MIS系统软件》实验报告操作系统.docx》由会员分享,可在线阅读,更多相关《《MIS系统软件》实验报告操作系统.docx(47页珍藏版)》请在冰豆网上搜索。
《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()//产
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MIS系统软件 MIS 系统软件 实验 报告 操作系统