欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    mis系统软件实验报告加密解密算法 .doc

    • 资源ID:2396457       资源大小:775.50KB        全文页数:40页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    mis系统软件实验报告加密解密算法 .doc

    学生学号 实验课成绩学 生 实 验 报 告 书实验课程名称MIS系统软件开课学院管理学院指导教师姓名江长斌学生姓名学生专业班级2011-2012学年第二学期实验项目名称加密解密算法实验成绩实 验 者专业班级组 别同 组 者无实验日期2012年03月07日第一部分:实验预习报告1、 实验目的、意义通过简单的加密解密算法的实现理解系统中加密解密的基本思想,熟练掌握使用C语言基本语句。2、 实验基本原理与方法单字母替换加密方法恺撒密码加密方法是把英文字母按字母表的顺序编号作为明文,将密钥定为m,加密算法为将明文加上密钥m,得到密码表,通过相反的过程由密文得到明文。单字母替换加密方法单表置换密码 由密钥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、 主要仪器设备及耗材实验室提供计算机和上网条件,C语言上机环境。4、 实验方案与技术路线(综合性、设计性实验)本实验设计路线如下图所示:第二部分:实验过程记录实验原始记录(包括实验数据记录,实验现象记录,实验过程发现的问题等)加密解密方法描述:1. 凯撒密码加密方法是把英文字母按字母表的顺序编号作为明文,将密钥定为m,加密算法为将明文加上密钥m,得到密码表,通过相反的过程由密文查询出明文。加密过程:首先输入密钥6,然后输入明文verygood,明文字母对应的数字值如下所示,则会产生的对应关系如下图所示。解密过程:首先输入密文bkxemuuj,输入密钥6,则可得到其对应的明文为verygood。2. 单表替换先选定一个单词,然后将它排列在密码对照表(两行26列第一行存a到Z的字母,第二行存对照密码)下方,重复出现的字母以第一次出现的明文字母为准,后面以该单词中未出现的字母按顺序排列备齐,生成一个密码,然后可以用此密码进行加密或解密。加密过程:首先输入明文verygood,输入密钥pengia,则会产生的对应关系如下图所示。解密过程:首先输入密文virybmmj,输入密钥pengia,则可得到其对应的明文为verygood。 3、多字母替换 假设明文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个字母的序号加密过程:首先输入明文verygood,输入密钥pengia,则会产生的对应关系如下图所示。解密过程:首先输入密文kieeoodh,输入密钥pengia,则可得到其对应的明文为verygood。4、置换算法属于转换加密法中的一种,也可以称作为轮转法,通过将明文每m个字符一组按顺序分成若干个字符串,再按照先列后行形成密文,并分析给出解密的方法。加密过程:输入明文verygood输入密钥6后,将形成如下排列:v e r y g oo d 由此可得其密文为:voedrygo。 解密过程:输入密文voedrygo,输入密钥6,即可反过来解密得到明文verygood。第三部分 结果与讨论(可加页)实验结果分析(包括数据处理、实验现象分析、影响因素讨论、综合分析和结论等)程序设计类实验:包括原程序、输入数据、运行结果、实验过程发现的问题及解决方法等;分析与设计、软件工程类实验:编制分析与设计报告,要求用标准的绘图工具绘制文档中的图表。系统实施部分要求记录核心处理的方法、技巧或程序段;其它实验:记录实验输入数据、处理模型、输出数据及结果分析一、实验数据记录和实验现象记录截图如下:(一)选用凯撒算法加密来测试1、 点击组建,选择开始调试,选择go后将进入界面2、 选择凯撒算法,输入13、 选择加密,输入1.4、 输入密钥6 5、输入加密数据 verygood6、打开04090917.txt查看文件内容为: (二)选用单表替换加密来测试1、第一步同上、第二步选择2、第三步同上、第四步输入密钥pengia、第五步输入verygood,得到:(三)选用多字母替换加密来测试1、第一步同上、第二步选择3、第三步同上、第四步输入密钥pengia、第五步输入verygood,得到:(四)选用置换算法加密来测试1、第一步同上、第二步选择4、第三步同上、第四步输入密钥6、第五步输入verygood,得到:(五)选用凯撒算法解密来验证1、第一步同上、第二步选择1、第三步选择2、第四步输入密钥6、第五步输入bkxemuuj,得到明文为verygood与前面的测试相对应:(6)其他算法的解密验证就不在这一一列举。二、实验过程中的结果与感受 总体上说还是比较顺利的,在理解了每一种加密解密算法的规则后,算法就不那么容易错了,实验的大体框架很明确,按照需求选择算法来选择加密或者解密,通过主函数来调用各个算法,而对于算法可能还存在一些不足人意的地方,还待发掘和完善。三、实验源代码#include <stdio.h>#include <string.h>#include <time.h>kaiser(int mode)/凯撒算法加密char str1100,str2100,svKey3;int i,key;printf("nnnn这里是凯撒算法nnn");/输入并检验key合法性printf("请输入一个密钥key(1-25之间的整数)n");scanf("%d",&key);while(key>25|key<1)printf("非法输入,请重新输入一个1-25之间的密钥(整数)n");scanf("%d",&key);fflush(stdin);switch (mode)case 1:printf("请输入需要加密的数据(本版本暂时仅支持字母加密)n");gets(str1);for(i=0;i<strlen(str1);i+)if('A'<=str1i&&str1i<='Z') str2i=('A'+(str1i-'A'+key)%26);else str2i=('a'+(str1i-'a'+key)%26);str2i='0'i=0;if(key>10)svKeyi+=key/10+48;svKeyi+=key%10+48;svKeyi='0'show(str1,str2,svKey);fileWrite(1,str1,str2,svKey);break;case 2:printf("nnn请输入需要解密的数据(本版本暂时仅支持字母解密)n");gets(str1);for(i=0;i<strlen(str1);i+)if('A'<=str1i&&str1i<='Z') str2i=('Z'-('Z'-str1i+key)%26);else str2i=('z'-('z'-str1i+key)%26);str2i='0'i=0;if(key>10)svKeyi+=key/10+48;svKeyi+=key%10+48;svKeyi='0'show(str2,str1,svKey);fileWrite(1,str2,str1,svKey);break;/此函数检验密钥中是否有重复字母int check(char k)int i,j;for(i=0;i<strlen(k);i+)if(ki<'a'|ki>'z') return 1;for(j=i+1;j<strlen(k);j+)if(ki=kj) return 1;return 0;single(int mode)int i,num26,j=0,sign;char letter127='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','0'char letter227,str1100,str2100,key26;printf("nnnn这里是单表替换法nnn");printf("请输入字母密钥key(建议在5-10个字母之间)n");gets(key);/大小写自动转换for(i=0;i<strlen(key);i+)if(keyi>='A'&&keyi<='Z') keyi=keyi+32;/确保字母唯一性函数sign=check(key);while(sign!=0)printf("非法输入,key中不可存在重复字母以及非字母字符,请重新输入一个keyn");gets(key);for(i=0;i<strlen(key);i+)if(keyi>='A'&&keyi<='Z') keyi=keyi+32;/printf("%cn",keyi);/确保字母唯一性函数sign=check(key);/这部分建立字母对应转换数组for(i=0;i<strlen(key);i+)letter2i=keyi;letter1keyi-'a'='_'for(i=0;i<26;i+)if(letter1i!='_') letter2strlen(key)+j+=letter1i;letter226='0'/将letter1中的数据恢复for(i=0;i<26;i+)letter1i=i+'a'switch (mode)case 1:printf("请输入需要进行加密的数据(本版本暂时仅支持字母加密)n");gets(str1);for(i=0;i<strlen(str1);i+)if('A'<=str1i&&str1i<='Z') str2i=letter2str1i-'A'-32;else str2i=letter2str1i-'a'str2i='0'puts(key);puts(str2);show(str1,str2,key);fileWrite(2,str1,str2,key);break;case 2:printf("请输入需要解密的数据(本版本仅支持字母加密)n");gets(str1);for(i=0;i<strlen(str1);i+)for(j=0;j<26;j+)if(str1i=letter2j|str1i=(letter2j-32) break;if('A'<=str1i&&str1i<='Z') str2i=letter1j-32;else str2i=letter1j;str2i='0'show(str2,str1,key);fileWrite(2,str2,str1,key);break;/解密words(int mode)char key26,str1100,str2100;char letter127='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','0'int i,sign;printf("nnnn这里是多字母替换法nnn");printf("请输入字母密钥key(建议在5-10个字母之间)n");gets(key);/大小写自动转换for(i=0;i<strlen(key);i+)if(keyi>='A'&&keyi<='Z') keyi=keyi+32;/确保字母唯一性函数sign=check(key);while(sign!=0)printf("非法输入,key中不可存在重复字母以及非字母字符,请重新输入一个keyn");gets(key);for(i=0;i<strlen(key);i+)if(keyi>='A'&&keyi<='Z') keyi=keyi+32;/printf("%cn",keyi);/确保字母唯一性函数sign=check(key);switch (mode)case 1:printf("请输入需要进行加密的数据(本版本暂时仅支持字母加密)n");gets(str1);for(i=0;i<strlen(str1);i+)if('A'<=str1i&&str1i<='Z') str2i=(keyi%strlen(key)-'A')%26+(str1i-'A')%26)%26+'A'else str2i=(keyi%strlen(key)-'a')%26+(str1i-'a')%26)%26+'a'str2i='0'show(str1,str2,key);fileWrite(3,str1,str2,key);break;case 2:printf("请输入需要解密的数据(本版本仅支持字母加密)n");gets(str1);for(i=0;i<strlen(str1);i+)if('A'<=str1i&&str1i<='Z') str2i=(str1i-'A')%26+52-(keyi%strlen(key)-'A')%26)%26+'A'else str2i=(str1i-'a')%26+52-(keyi%strlen(key)-'a')%26)%26+'a'str2i='0'show(str2,str1,key);fileWrite(3,str2,str1,key);break;replace(int mode)char str1100,str2100,svKey2;int i,j,k,key;int len1;printf("nnnn这里是置换算法nnn");printf("请输入一个密钥(3-10之间的整数)n");scanf("%d",&key);while(key<3|key>10)printf("非法输入,请重新输入一个密钥(3-10之间的整数)n");scanf("%d",&key);fflush(stdin);switch (mode)case 1:printf("请输入需要进行加密的数据(本版本暂时仅支持字母加密)n");gets(str1);k=0;str1strlen(str1)='0'len1=strlen(str1);for(i=0;i<key;i+)/printf("%d %dn",strlen(str1),key);for(j=0;j<(len1/key+1);j+)if(j*key+i)>=len1) break;str2k+=str1j*key+i;/printf("%c %dn",str1j*key+i,j*key+i);str2k='0'svKey0=key+48;svKey1='0'show(str1,str2,svKey);fileWrite(4,str1,str2,svKey);break;case 2:printf("请输入需要进行加密的数据(本版本暂时仅支持字母加密)n");gets(str1);len1=strlen(str1);for(i=k=0;i<len1/key;i+)for(j=0;j<key;j+)if(j<len1%key)str2k+=str1j*(len1/key+1)+i;elsestr2k+=str1(len1%key)*(len1/key+1)+(j-len1%key)*len1/key+i;for(i=0;i<len1%key;i+)str2k+=str1i*(len1/key+1)+len1/key;str2k='0'svKey0=key+48;svKey1='0'show(str2,str1,svKey);fileWrite(4,str2,str1,svKey);break;/在屏幕打印明文密文密钥show(char str1,char str2,char key)printf("nnn你的明文是:");puts(str1);printf("你的密文是:");puts(str2);printf("你的密钥是:");puts(key);/此函数将明文密文密钥存进文件fileWrite(int way,char str1,char str2,char key)FILE *fp;char fileName18;int temp4,i,t;time_t rawtime;struct tm*timeinfo;/获取时间函数time(&rawtime);timeinfo=localtime(&rawtime);/设立文件存储名字/fileName0='a'/temp0=(1900+timeinfo->tm_year)%100;temp0=1+timeinfo->tm_mon;temp1=timeinfo->tm_mday;temp2=timeinfo->tm_hour;temp3=timeinfo->tm_min;i=0;if(temp0<10) fileNamei+='0'else fileNamei+=temp0/10+48;fileNamei+=temp0%10+48;if(temp1<10) fileNamei+='0'else fileNamei+=temp1/10+48;fileNamei+=temp1%10+48;if(temp2<10) fileNamei+='0'else fileNamei+=temp2/10+48;fileNamei+=temp2%10+48;if(temp3<10) fileNamei+='0'else fileNamei+=temp3/10+48;fileNamei+=temp3%10+48;fileNamei+='.'fileNamei+='t'fileNamei+='x'fileNamei+='t'fileNamei='0'/puts(fileName);/开始文件操作fp=fopen(fileName,"w");fprintf(fp,"你使用的算法是:");switch (way)case 1:fprintf(fp,"凯撒算法");break;case 2:fprintf(fp,"单表替换法");break;case 3:fprintf(fp,"多字母替换");break;case 4:fprintf(fp,"置换算法");break;fprintf(fp,"nn你的明文是:");fputs(str1,fp);fprintf(fp,"n你的密文是:");fputs(str2,fp);fprintf(fp,"n你的密钥是:");fputs(key,fp);fprintf(fp,"nnnn温馨提示,请将明文删除,并将密钥和密文分开存放,需要解密时可以继续使用本软件n");fprintf(fp,"nn-nnn");fclose(fp);fflush(stdin);printf("nn本次算法结果已经存储进运算器同级目录,名为以下的文件中,请查看:n");puts(fileName);main()int way,mode;printf("n 欢迎使用加解密软件nn");printf("*n");printf("本软件提供四种加解密算法,用户可以选择其中一种进行加解密运算n");printf("*nn");printf(" 选择你想使用的算法:nn");printf("-1 凯撒算法-n");printf("-2 单表替换-n");printf("-3 多字母替换-n");printf("-4 置换算法-nnn");printf("nn提示:选择对应算法的前的数字,按下Enter键进入操作n");scanf("%d",&way);while(way!=1&&way!=2&&way!=3&&way!=4)printf("请输入合法命令(算法前的数字),并按下Enter确定n");scanf("%d",&way);printf("nn 选择操作模式:nnn-1 加密n-2 解密n");scanf("%d",&mode);while(mode!=1&&mode!=2)printf("请输入合法命令(操作模式前的数字),并按下Enter确定n");scanf("%d",&mode);fflush(stdin);switch (way)case 1: kaiser(mode);break;case 2: single(mode);break;case 3: words(mode);break;case 4: replace(mode);break;fflush(stdin);getchar();-实验报告评语及成绩(请按优,良,中,及格,不及格五级评定) 成绩: 教师签字:实验项目名称进程管理实验实验成绩实 验 者专业班级组 别同 组 者实验日期2012年03月7日第一部分:实验预习报告1、 实验目的、意义用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。2、 实验基本原理与方法进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法。 每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。 进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。 进程的运行时间以时间片为单位进行计算。如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。 每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。3、 主要仪器设备及耗材实验室提供计算机和上网条件,C语言上机环境。4、 实验方案与技术路线(综合性、设计性实验)第二部分:实验过程记录实验原始记录(包括实验数据记录,实验现象记录,实验过程发现的问题等)第一部分:最高优先数优先的调度算法(1) 选择执行后,将进入主界面:(2)按任意键后进入:(3)输入1后:(4)分别输入5个进程的进程名、进程优先数、进程运行时间如下:(5) 此后,每按一次回车键,相当于队列首进程运行了一个cpu的时间,运行完毕后,如果要求运行时间不等于已运行时间,则再将它加入就绪队列;否则将其状态置为“结束”,且退出就绪队列。第一次运行程序时的正在运行的进程以及等待队列中的进程的各信息如下:(6) 继续按任意键,将出现:(7) 重复(6)操作直至运行完毕,将回到初始界面:第二部分:采用先来先服务算法(1) 进入主界面后,输入进程的个数:(2) 进入主界面后,输入进程的个数5,并分布输入5个进程的进程名、运行时间: (3) 运行之后将出现:(4) 可以再此时添加进程,也可以选择按任意键继续运行,在这里选择继续运行:(5) 重复第4部,直至运行结束。第三部分 结果与讨论(可加页)实验结果分析(包括数据处理、实验现象分析、影响因素讨论、综合分析和结论等)程序设计类实验:包括源程序、输入数据、运行结果、实验过程发现的问题及解决方法等;分析与设计、软件工程类实验:编制分析与设计报告,要求用标准的绘图工具绘制文档中的图表。系统实施部分要求记录核心处理的方法、技巧或程序段;其它实验:记录实验输入数据、处理模型、输出数据及结果分析一:实验结果与讨论 实验结果与预期一致,通过实验我深刻理解了最高优先数优先调度算法和先来先服务调度算法的调度过程,实验过程中可能有点缺陷的是由于时间问题,没有把两者很好地整合成一个程序,但这样分两个来弄的话还是比较清晰明了的。二:源程序(一) 最高优先数优先的调度算法#include "stdio.h"#include <stdlib.h>#include <conio.h> #define getpch(type) (type*)malloc(sizeof(type) #define NULL 0 struct pcb /* 定义进程控制块PCB */ char name10; /进程名char state; /进程状态int super; /进程优先级int ntime; /进程需要运行时间int rtime; /进程已经运行的时间struct pcb* link; *ready=NULL,*p; typedef struct pcb PCB; void inunization() /初始化界面 printf("nntt*ttn"); printf("tttt实验二 进程调度n"); printf("tt*ttn"); printf("tttt请输入任意键进入演示过程n"); printf("tttt请按任意键进入演示过程n"); getch(); void sort() /* 建立对进程进行优先级排列函数*/ PCB *first, *second; int insert=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; void input() /* 建立进程控制块函数*/ int i;system("cls"); /*清屏*/

    注意事项

    本文(mis系统软件实验报告加密解密算法 .doc)为本站会员(文库蛋蛋多)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开