系统软件实验报告.docx
《系统软件实验报告.docx》由会员分享,可在线阅读,更多相关《系统软件实验报告.docx(23页珍藏版)》请在冰点文库上搜索。
![系统软件实验报告.docx](https://file1.bingdoc.com/fileroot1/2023-7/10/e39ec0b3-4590-45e0-842d-c9801c735218/e39ec0b3-4590-45e0-842d-c9801c7352181.gif)
系统软件实验报告
学生学号
实验课成绩
学生实验报告书
实验课程名称
MIS系统软件
开课学院
管理学院
指导教师姓名
学生姓名
学生专业班级
2010
--
2011
学年
第
一
学期
实验项目名称
加密解密算法
实验成绩
实验者
专业班级
组别
同组者
实验日期
2010年11月22日
第一部分:
实验预习报告
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)选定一种加密解密算法,对该算法实现的思路进行分析;
(2)编程实现选定的算法
(3)对所编写的程序进行调试
(4)对程序运行的结果进行截图
(5)对实验结果进行分析
第二部分:
实验过程记录
实验原始记录(包括实验数据记录,实验现象记录,实验过程发现的问题等)
(1)实验数据和文件
(2)程序运行主菜单界面
(3)单字母替换加密
主菜单界面下,选择1,进入单字母替换加密算法,直接由屏幕输入字符,过程如下:
输入字符串“zhuli”,但击回车键,屏幕输出加密后的字符“asfor”(钥为默认值),同时显示出子菜单,进行下一步的选择。
进行解密操作步骤如下:
输入字符串“asfor”,但击回车键,屏幕输出解密后的字符“zhuli”,同时显示出子菜单,进行下一步的选择。
返回主菜单步骤如下:
(4)凯撒加密算法文件操作
在主菜单下,选择选项2,则进入子菜单二,如下图
选择1,进行文件的加密操作,操作步骤如下图:
选择in.txt文件,对其加密,采用凯瑟加密算法,密钥设置为2,加密后的内容写入文件out.txt文件中。
in.txt文件和out.txt文件中的内容如下图所示:
接着选择解密文件,对out.txt文件中的内容进行解密,操作步骤如下:
output.txt文件中的内容如下,与源文件内容相同:
(5)暴力破解文件过程如下
选择子菜单2中的菜单3项,输入要破解的文件名,屏幕显示文件的内容,如下图
第三部分结果与讨论(可加页)
实验结果分析(包括数据处理、实验现象分析、影响因素讨论、综合分析和结论等)
程序设计类实验:
包括原程序、输入数据、运行结果、实验过程发现的问题及解决方法等;
分析与设计、软件工程类实验:
编制分析与设计报告,要求用标准的绘图工具绘制文档中的图表。
系统实施部分要求记录核心处理的方法、技巧或程序段;
其它实验:
记录实验输入数据、处理模型、输出数据及结果分析
(1)源代码
#include
#include
#include
#include
//#include
#defineM100
charencrypt(charch,intn)/*加密函数,把字符向右循环移位n*/
{
while(ch>='A'&&ch<='Z')
{
return('A'+(ch-'A'+n)%26);
}
while(ch>='a'&&ch<='z')
{
return('a'+(ch-'a'+n)%26);
}
returnch;
}
voidexit(intexit_code);
voidsleep(intn)
{
inti=0,j=0;
for(j=0;j<=n;j++)
{
for(i=0;i<2000;i++)
i++;
}
}
voidmenu1()/*菜单,1.字母倒排序,2.恺撒密码*/
{
system("CLS");
printf("\n===================信管0804班祝黎========================");
printf("\n1.字母倒排序");
printf("\n2.恺撒密码");
printf("\n3.Quit\n");
printf("=========================================================\n");
printf("Pleaseselectaitem:
");
return;
}
voidmenu()/*菜单,1.加密,2.解密,3.暴力破解,密码只能是数字*/
{
system("CLS");//clrscr();
printf("\n=========================================================");
printf("\n1.Encryptthefile");
printf("\n2.Decryptthefile");
printf("\n3.Forcedecryptfile");
printf("\n4.Quit\n");
printf("=========================================================\n");
printf("Pleaseselectaitem:
");
return;
}
voidmain()
{
inti,n;
charch0,ch1,ch2;
ints,j,a;
charstr1[M]={'0'},str2[M]={'0'};
FILE*in,*out;
charinfile[20],outfile[20];
//textbackground(0);
//textcolor(10);
system("CLS");//clrscr();
sleep(3);/*等待3秒*/
menu1();
ch0=getch();
printf("%c",ch0);
while(ch0!
='3')
{
if(ch0=='1')
{
//system("CLS");//clrscr();
printf("\n");
printf("1.加密\n");
printf("2.解密\n");
printf("3.返回上级菜单\n");
//printf("4.Quit\n");
printf("thewayyouchoose:
");
scanf("%d",&a);
switch(a)
{
case1:
{
printf("请输入要加密的原文\n");
fflush(stdin);
gets(str1);
s=strlen(str1);
for(j=0;j
str2[j]=219-str1[j];
printf("得到密文是:
\n");
puts(str2);
}break;
case2:
{
printf("请输入要解密的密文:
\n");
fflush(stdin);
gets(str1);
s=strlen(str1);
for(j=0;j
str2[j]=219-str1[j];
printf("得到原文:
\n");
puts(str2);
}break;
case3:
{
//menu1();
}break;
default:
printf("输入错误");
}
menu1();
ch0=getch();
}//if(ch0=='1')
if(ch0=='2')
{
system("CLS");//clrscr();
menu();
ch2=getch();
while(ch2!
='4')
{
if(ch2=='1')
{
system("CLS");//clrscr();
printf("\nPleaseinputtheinfile:
");
scanf("%s",infile);/*输入需要加密的文件名*/
if((in=fopen(infile,"r"))==NULL)
{
printf("Cannotopentheinfile!
\n");
printf("Pressanykeytoexit!
\n");
getch();
exit(0);
}
printf("Pleaseinputthekey:
");
scanf("%d",&n);/*输入加密密码*/
printf("Pleaseinputtheoutfile:
");
scanf("%s",outfile);/*输入加密后文件的文件名*/
if((out=fopen(outfile,"w"))==NULL)
{
printf("Cannotopentheoutfile!
\n");
printf("Pressanykeytoexit!
\n");
fclose(in);
getch();
exit(0);
}
while(!
feof(in))/*加密*/
{
fputc(encrypt(fgetc(in),n),out);
}
printf("\nEncryptisover!
\n");
fclose(in);
fclose(out);
sleep
(1);
}//if(ch2=='1')
if(ch2=='2')
{
system("CLS");//clrscr();
printf("\nPleaseinputtheinfile:
");
scanf("%s",infile);/*输入需要解密的文件名*/
if((in=fopen(infile,"r"))==NULL)
{
printf("Cannotopentheinfile!
\n");
printf("Pressanykeytoexit!
\n");
getch();
exit(0);
}
printf("Pleaseinputthekey:
");
scanf("%d",&n);/*输入解密密码(可以为加密时候的密码)*/
n=26-n;
printf("Pleaseinputtheoutfile:
");
scanf("%s",outfile);/*输入解密后文件的文件名*/
if((out=fopen(outfile,"w"))==NULL)
{
printf("Cannotopentheoutfile!
\n");
printf("Pressanykeytoexit!
\n");
fclose(in);
getch();
exit(0);
}
while(!
feof(in))
{
fputc(encrypt(fgetc(in),n),out);
}
printf("\nDecryptisover!
\n");
fclose(in);
fclose(out);
sleep
(1);
}//if(ch2=='2')
if(ch2=='3')
{
system("CLS");//clrscr();
printf("\nPleaseinputtheinfile:
");
scanf("%s",infile);/*输入需要解密的文件名*/
if((in=fopen(infile,"r"))==NULL)
{
printf("Cannotopentheinfile!
\n");
printf("Pressanykeytoexit!
\n");
getch();
exit(0);
}
printf("Pleaseinputtheoutfile:
");
scanf("%s",outfile);/*输入解密后文件的文件名*/
if((out=fopen(outfile,"w"))==NULL)
{
printf("Cannotopentheoutfile!
\n");
printf("Pressanykeytoexit!
\n");
fclose(in);
getch();
exit(0);
}
for(i=1;i<=25;i++)/*暴力破解过程,在察看信息正确后,可以按'Q'或者'q'退出*/
{
rewind(in);
rewind(out);
system("CLS");//clrscr();
printf("==========================================================\n");
printf("Theoutfileis:
\n");
printf("==========================================================\n");
while(!
feof(in))
{
ch1=encrypt(fgetc(in),26-i);
putch(ch1);
fputc(ch1,out);
}
printf("\n========================================================\n");
printf("Thecurrentkeyis:
%d\n",i);/*显示当前破解所用密码*/
printf("Press'Q'toquitandotherkeytocontinue......\n");
printf("==========================================================\n");
ch1=getch();
if(ch1=='q'||ch1=='Q')/*按'Q'或者'q'时退出*/
{
system("CLS");//clrscr();
printf("\nGoodBye!
\n");
fclose(in);
fclose(out);
sleep(3);
exit(0);
}
}
printf("\nForcedecryptisover!
\n");
fclose(in);
fclose(out);
sleep
(1);
}//if(ch2=='3')
menu();
ch2=getch();
}//while(ch2!
='4')
menu1();
ch0=getch();
}//if(ch0=='2')
}//while(ch0!
='3')
system("CLS");//clrscr();
printf("\nGoodBye!
\n");
sleep(3);
}
(2)结论
采用单字母替换加密能够轻易实现字符或文件的加密工作,但同时也容易被破解,要想有更安全的加密,则需选择更加安全的算法。
实验报告评语及成绩(请按优,良,中,及格,不及格五级评定)
成绩:
教师签字:
实验项目名称
进程管理实验
实验成绩
实验者
专业班级
组别
同组者
实验日期
2010年11月28日
第一部分:
实验预习报告
1、实验目的、意义
用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。
2、实验基本原理与方法
进程调度算法:
采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法。
每个进程有一个进程控制块(PCB)表示。
进程控制块可以包含如下信息:
进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。
进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。
进程的到达时间为进程输入的时间。
每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一就绪进程获得CPU后都只能运行一个时间片。
用已占用CPU时间加1来表示。
进程的运行时间以时间片为单位进行计算。
如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。
每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。
重复以上过程,直到所要进程都完成为止。
3、主要仪器设备及耗材
实验室提供计算机和上网条件,C语言上机环境。
4、实验方案与技术路线(综合性、设计性实验)
第二部分:
实验过程记录
实验原始记录(包括实验数据记录,实验现象记录,实验过程发现的问题等)
(1)输入一个进程号和优先级以及运行时间,如下:
依次执行,执行过程如下:
当运行的时间达到时,进程结束,如下
第三部分结果与讨论(可加页)
实验结果分析(包括数据处理、实验现象分析、影响因素讨论、综合分析和结论等)
程序设计类实验:
包括源程序、输入数据、运行结果、实验过程发现的问题及解决方法等;
分析与设计、软件工程类实验:
编制分析与设计报告,要求用标准的绘图工具绘制文档中的图表。
系统实施部分要求记录核心处理的方法、技巧或程序段;
其它实验:
记录实验输入数据、处理模型、输出数据及结果分析
(1)源程序
#include
#include
#include
#include
#definegetpch(type)(type*)malloc(sizeof(type))
#defineNULL0
structpcb{/*定义进程控制块PCB*/
charname[10];
charstate;
intsuper;
intntime;
intrtime;
structpcb*link;
}*ready=NULL,*p;
typedefstructpcbPCB;
voidsort()/*建立对进程进行优先级排列函数*/
{
PCB*first,*second;
intinsert=0;
if((ready==NULL)||((p->super)>(ready->super)))/*优先级最大者,插入队首*/
{
p->link=ready;
ready=p;
}
else/*进程比较优先级,插入适当的位置中*/
{
first=ready;
second=first->link;
while(second!
=NULL)
{
if((p->super)>(second->super))/*若插入进程比当前进程优先数大,*/
{/*插入到当前进程前面*/
p->link=second;
first->link=p;
second=NULL;
insert=1;
}
else/*插入进程优先数最低,则插入到队尾*/
{
first=first->link;
second=second->link;
}
}
if(insert==0)first->link=p;
}
}
voidinput()/*建立进程控制块函数*/
{
inti,num;
system("CLS");//clrscr();/*清屏*/
printf("\n请输入进程号:
");
scanf("%d",&num);
for(i=0;i{
printf("\n进程号No.%d:
\