《MIS系统软件》实验报告_加密解密_第1页
《MIS系统软件》实验报告_加密解密_第2页
《MIS系统软件》实验报告_加密解密_第3页
《MIS系统软件》实验报告_加密解密_第4页
《MIS系统软件》实验报告_加密解密_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、精品学生学号 7实验课成绩学 生 实 验 报 告 书实验课程名称MIS系统软件开课学院管理学院指导教师姓名江长斌学生姓名王涛学生专业班级信管08012010-2011学年第一学期实验项目名称加密解密算法实验成绩实 验 者王涛专业班级信管0801组 别同 组 者实验日期2010年 12 月12 日第一部分:实验预习报告1、 实验目的、意义通过简单的加密解密算法的实现理解系统中加密解密的基本思想,熟练掌握使用C语言基本语句。2、 实验基本原理与方法单字母替换加密方法凯撒密码加密方法是把英文字母按字母表的顺序编号作为明文,将密钥定为m,加密算法为将明文加上密钥m,得到密码表,通过相反的过程由密文得到

2、明文。单字母替换加密方法单表置换密码 由密钥Key构造字符置换表,完成加密和解密过程。多字母替换加密方法维吉利亚密码假设明文m=m1 m2 m3 mn;密钥k=k1k2 k3 kn,对应密文c=c1 c2 c3 cn,密文为:ci=(mi+ki )mod 26 ,26个字母的序号依次为025,ci , mi ,ki是分别是密文明文密钥中第i个字母的序号。转换加密方法 通过将明文每m个字符一组按顺序分为若干个字符串,再按照先列后行形成密文,并分析给出解密的方法。 或者通过给出一个密钥字符串,将明文按密钥字符串长度按顺序分为若干组字符串,再按照密钥字符串各个字符的顺序形成密文,并分析给出解密的方法

3、。3、 主要仪器设备及耗材实验室提供计算机和上网条件,C语言上机环境。4、 实验方案与技术路线(综合性、设计性实验)略第二部分:实验过程记录实验原始记录(包括实验数据记录,实验现象记录,实验过程发现的问题等)加密解密方法描述:1.单表置换:先选定一个单词,例如whutmis,然后将它排列在密码对照表(两行26列第一行存a到z的字母,第二行存对照的密码)下方,重复出现的字母以第一次现时对应的明文字母为准;后面以该单词中未出现的字母按顺序排列备齐,生成一个密码,然后可以用此密码本进行加密或解密。加密过程:首先输入加密明文如whutmis,然后输入密匙如iloveyou。再然后建立临时密码表如下:(

4、上一行是字母,下一行是密码)ABCDEFGHIJKLMNOPQRSTUVWXYZILOVEYUABCDFGHJKMNPQRSTWXZ 之后,将whutmis对照第一行的相应密匙如W对应T,依次输出。结果应为tarqgbp;解密过程:首先输入密文如windows,然后输入密匙iloveyou。同理加密过程,可以对照密码表依次找到密文中对应的原文。结果应为 xarkcxv。2.凯撒密码:把英文字母按字母表的顺序编号作为明文,将密钥定为m,加密算法为将明文加上密钥m,得到密码表,通过相反的过程由密文得到明文。加密过程:首先输入明文为whutmis,然后输入密钥3,之后同样会形成两行对应的同1方法一样

5、的密码表:ABCDEFGHIJKLMNOPQRSTUVWXYZXYZABCDEFGHIJKLMNOPQRSTUVW之后,将自动输出加密后的密文,结果为:zkxwplv;解密过程:输入需要解密的密文如:iloveyou,然后输入密钥3(为简便起见,同加密过程使用同样的密钥),则得到加密过程中的同样密码表,然后依次对应输出原文,结果为filsbvlr。3.轮转法:通过将明文每m个字符一组按顺序分为若干个字符串,再按照先列后行形成密文,并分析给出解密的方法。加密过程:首先输入明文whutmis,然后输入密匙3,之后输入的明文会按照每行3个字符的形式进行排列,如此例中形成如下的排列:w h ut m

6、is之后,输出加密后的密文则使用先列后行的方法,此例结果为wtshmui; 解密过程:首先输入密文iloveyou,然后输入密匙3,之后同样会将输入的密文按照每行3个字符的形式排列,形成如下排列:i l ov e yo u 之后,输出解密后的明文使用先列后行的方法,此例结果为ivoleuoy。4.维吉利亚密码: 假设明文m=m1 m2 m3 mn;密钥k=k1k2 k3 kn,对应密文c=c1 c2 c3 cn,密文为:ci=(mi+ki )mod 26 , 26个字母的序号依次为025,ci , mi ,ki是分别是密文明文密钥中第i个字母的序号。(如下图) 加密过程:首先输入明文如whut

7、mis,然后输入与明文字符数相等的密匙如iloveyu,第一个字符的密文可以求得c1=(w+i)mod26=4,此时对应编号4的字母为E,则明文W对应的密文为E,依次类推,可以将所有明文加密得到密文esioqgm;012345678910111213141516171819202122232425ABCDEFGHIJKLMNOPQRSTUVWXYZ 解密过程:首先输入密文esioqgm,然后输入与密文字符数相等的密匙如iloveyu,将加密过程的原理反过来运用,如第一个密文字符为E,则对应的编号为4,然后求的明文为W,依次类推,求得明文为:whutmis。第三部分 结果与讨论(可加页)实验结果

8、分析(包括数据处理、实验现象分析、影响因素讨论、综合分析和结论等)程序设计类实验:包括原程序、输入数据、运行结果、实验过程发现的问题及解决方法等;分析与设计、软件工程类实验:编制分析与设计报告,要求用标准的绘图工具绘制文档中的图表。系统实施部分要求记录核心处理的方法、技巧或程序段;其它实验:记录实验输入数据、处理模型、输出数据及结果分析(以下实验全在C-free4.1+windows7下编译执行)结果:首先主页面:输入1即跳到单表加解密演示:此时若输入的是非法字符则:输入1加密过程加密数据及结果解密:然后可根据提示选择回到主界面或是继续演示单表置换法。下面我们回到主界面并进入凯撒密码界面:加密

9、过程:解密过程:同样可选择回主界面或是继续演示凯撒密码。回到主界面并选择轮转法加密:解密:接下来是维吉利亚密码:加密:解密:实验结果感受:1本来觉得加密解密的逻辑没什么多复杂,都是很简单的数学逻辑,但是真把方法运用到程序中还是花了不少的功夫,以后要多进行这种锻炼,提高代码编译的水平;2实验过程中发现有些知识点不太熟悉,容易出一些小错误,更多的时候就是这些小错误让人花费了大量时间。所以写程序必须要细心,尽量不要些小错误。然后就是出现错误时,用printf来找错误位置,始终保持头脑清楚。附录:(部分源代码)主界面:/*/* 计算机操作系统加密解密算法实验 */* 姓名:王涛 */* 班级:信管08

10、01班 */*/ #include#define MAXLENTH 256#include #include#include#include /包含跳转函数的头文件 jmp_buf buf_main; /定义能保存跳跃点的变量#includedanbiaozhihuan.c#includekaisamima.c#includelunhuanfa.c#includeweijiliyamima.cmain()int choice;jmp_buf buf_main2; /定义能保存跳跃点的变量char choicetemp; setjmp(buf_main);/设置跳跃点 system(cls);/

11、清屏函数 setjmp(buf_main2);/避免上面的清屏函数把你的错误输入清掉printf(n); printf(-);printf(n加密解密方法:n);printf(-n);printf(1、单表置换n);printf(2、凯撒密码n);printf(3、轮转法n);printf(4、维吉利亚密码n);printf(5、退出n);printf(-n);printf(请输入15进行选择:); choicetemp=getch(); printf(%c,choicetemp); choice=choicetemp-0; if(choice5|choice0)choice=0; switc

12、h(choice) case 1:main_danbiaozhihuan();break;/单表置换密码演示 case 2:main_kaisamima();break;/凯撒密码演示 case 3:main_lunhuanfa();break;/轮换法演示 case 4:main_weijiliya();break;/维吉利亚密码演示 case 5:exit(0); case 0:printf(n请输入选项前面的编号!n); longjmp(buf_main2, 1) ;/跳到设置了跳跃点的位置 单表置换:void jiajiemibiaoget(char mishi)/密码对照表创建函数

13、int flg,k=0; char ch;int mishi_length,i,j,n;mishi_length=strlen(mishi);for( i=0;imishi_length;i+) flg=0;for( j=0;ji;j+)if(mishii=mishij)flg=1;break;if(flg=1) continue;jiajiemibiao1k=mishii;k+;for(k;k26;k+)for(j=0;j26;j+) flg=0; ch=j+a; for(n=0;nk;n+) if(ch=jiajiemibiao1n) flg=1; break; if(flg=1) con

14、tinue; jiajiemibiao1k=ch; break;/避免重复赋值 void danbiao_jiami(char mingwen)/加密函数 int mingwen_length=strlen(mingwen),i,j; char danbiao_miwenmingwen_length; for( i=0;imingwen_length;i+)/分别得到密文码 j=(int)(mingweni-a); danbiao_miweni=jiajiemibiao1j; printf(n加密后密文是:);for(i=0;imingwen_length;i+)printf(%c,danbi

15、ao_miweni);void danbiao_jiemi(char miwen)/解密函数 int miwen_length= strlen(miwen),i,j;char danbiao_mingwenmiwen_length;for(i=0;imiwen_length;i+)/分别得到明文 for(j=0;j26;j+) if(miweni=jiajiemibiao1j) danbiao_mingweni=jiajiemibiao0j; printf(解密后明文是:);for(i=0;imiwen_length;i+)printf(%c,danbiao_mingweni);凯撒密码:vo

16、id kaisa_jiami(char mingwen)/凯撒加密 int mingwenlength=strlen(mingwen);char kaisa_miwenmingwenlength;int mishi_kaisa;long i;printf(你所输入的明文是:%s。密码长:%d,mingwen,mingwenlength ); printf(n请输入你的密匙(必须是整数):);scanf(%d,&mishi_kaisa);printf(正在加密,请等候);for(i=1;i1000000000;i+) if(i%200000000=0)printf(.);for(i=0;i=A&

17、mingweni=a&mingweni=z) kaisa_miweni=a+(mingweni-a+mishi_kaisa)%26;printf(n加密后密文是:);for(i=0;imingwenlength;i+)printf(%c,kaisa_miweni);void jiemi (char miwen,int mishi)/解密函数 int miwenlength=strlen(miwen),i;char mingwenmiwenlength;for( i=0;i=A&miweni=a&miweni=z) mingweni=a+(miweni-a-mishi+2600)%26;prin

18、tf(解密后明文是:);for(i=0;imiwenlength;i+)printf(%c,mingweni);轮换法:void transform_jiami(char mingwen,int mishi)/加密函数 int mingwen_length=strlen(mingwen),i,j=0,k=0,n=0,m=0;char temparryMAXLENTHmishi;char miwenmingwen_length;for(i=0;iMAXLENTH;i+)/初始化临时密码表 for(m=0;mmishi;m+)temparryim=;for(i=0;imingwen_length;

19、i+)/给临时密码表赋值 temparryjk+=mingweni;if(k=mishi)j+;k=0;if(k!=0) j+;for(i=0;imishi;i+)/分别得到密文 for(k=0;kj;k+)if(temparryki=) break;miwenn+=temparryki; printf(n加密后是:);for(i=0;imingwen_length;i+)printf(%c,miweni);for(i=0;irow_d;i+) for(j=0;jmishi;j+) mingwenm+=temparryjij; for(j=0;jrow_last;j+) mingwenm+=t

20、emparryjrow_dj; printf(已经处理解密过程!); /测试程序是否执行到此 printf(n解密后明文是:);for(i=0;imiwen_length;i+)printf(%c,mingweni);维吉利亚密码:void vejliya_jiami(char mingwen,char mishi)/加密函数 int mingwen_length=strlen(mingwen),i;int mishi_length=strlen(mishi);char miwen_vejliyamishi_length;for(i=0;imingwen_length;i+)/加密过程 miw

21、en_vejliyai=(mingweni-a+mishii-a)%26+a;printf(n加密后是:);for(i=0;imingwen_length;i+)printf(%c,miwen_vejliyai);void vejliya_jiemi(char miwen,char mishi)/解密函数 int miwen_length=strlen(miwen),i;int mishi_length=strlen(mishi);char mingwen_vejliyamishi_length;for(i=0;imiwen_length;i+)/解密过程 mingwen_vejliyai=(

22、miweni-mishii+2600)%26+a;printf(n解密后明文是:);for(i=0;imiwen_length;i+)printf(%c,mingwen_vejliyai);-实验报告评语及成绩(请按优,良,中,及格,不及格五级评定) 成绩: 教师签字:实验项目名称进程管理实验实验成绩实 验 者王涛专业班级信管0801组 别同 组 者实验日期2010 年 12 月23 日第一部分:实验预习报告1、 实验目的、意义用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。2、 实验基本原理与方法进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数

23、最高的进程)和先来先服务算法。 每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。 进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。 进程的运行时间以时间片为单位进行计算。如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已

24、占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。 每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。3、 主要仪器设备及耗材实验室提供计算机和上网条件,C语言上机环境。4、 实验方案与技术路线(综合性、设计性实验)第二部分:实验过程记录实验原始记录(包括实验数据记录,实验现象记录,实验过程发现的问题等)输入一个进程号和优先级以及运行时间,如图:执行过程如下:输入的进程时间为3,所以当运行三次后进程结束。如图:第三部分 结果与讨论(可加

25、页)实验结果分析(包括数据处理、实验现象分析、影响因素讨论、综合分析和结论等)程序设计类实验:包括源程序、输入数据、运行结果、实验过程发现的问题及解决方法等;分析与设计、软件工程类实验:编制分析与设计报告,要求用标准的绘图工具绘制文档中的图表。系统实施部分要求记录核心处理的方法、技巧或程序段;其它实验:记录实验输入数据、处理模型、输出数据及结果分析(1)源程序#include #include #include #define getpch(type) (type*)malloc(sizeof(type) #define NULL 0 struct pcb /* 定义进程控制块PCB */ c

26、har name10; char state; int super; int ntime; int rtime; struct pcb* link; *ready=NULL,*p; typedef struct pcb PCB; void sort() /* 建立对进程进行优先级排列函数*/ PCB *first, *second; int insert=0; if(ready=NULL)|(p-super)(ready-super) /*优先级最大者,插入队首*/ p-link=ready; ready=p; else /* 进程比较优先级,插入适当的位置中*/ first=ready; s

27、econd=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; void input() /* 建立进程控制块函数*/ int i,num; clrscr(); /*清屏*/ pr

28、intf(n Please input the process number?); scanf(%d,&num); for(i=0;iname); printf(n Input the process preferred numbers:); scanf(%d,&p-super); printf(n Input the process time:); scanf(%d,&p-ntime); printf(n); p-rtime=0;p-state=w; p-link=NULL; sort(); /* 调用sort函数*/ int space() int l=0; PCB* pr=ready; while(pr!=NULL) l+; pr=pr-link; return(l); void disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/ printf(n qname t state t super t ndtime t runtime n); printf(|%st,pr-name); printf(|%ct,pr-state); printf(|%dt,pr-super); printf(|%dt,pr-ntime); printf(|%dt,pr-rtime); printf(n); void c

温馨提示

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

评论

0/150

提交评论