实验一密码学基本算法的实现一.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验一密码学基本算法的实现一

PAGE  PAGE 9 上机实验报告(一) 实验课程:应用密码学 实验时间:2013年9月26日 任课教师:刘光军 班级:11级信息与计算科学专业1班 姓名:刘静 学号:0202110123一、实验名称: 密码学基本算法的实现(一)二、实验目的 学习常见的古典密码学算法,通过编程实现替代密码算法和置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。三、实验要求 1、在D盘建立一个自己的文件夹; 2、开启软件平台—Visual C++6.0,在此环境下进行编程实验; 3、将题目、你输入的命令、程序及运行结果保存在word文件中,作为作业提交; 4、若出现错误,修改、运行直到输出正确结果。四、报告正文(文档,数据,模型,程序,图形) 1、编写程序实现仿射加密和Playfair密码。通过讨论分析单表代替密码和多表代替密码算法的功能需求,详细设计实现代替密码算法的数据结构和流程,给出测试用例和测试步骤,得出测试和结论。算法的实现程序必须提供加密和解密两个接口:int?encrypt()和int?decrypt()。当加密或者解密成功时返回CRYPT_OK,失败时返回CRYPT_ERROR。 /**********加密的实现**********/ #include stdlib.h #include stdio.h #include string.h char book[5][5]={ }; //密码本.设为全局变量. /****************************** *查找在密码本中的位置。 *******************************/ int findlocation(char m,int *t) { int i,j; int temp; //表示行数. for(i=0;i5;i++) for(j=0;j5;j++) if(m==book[i][j]) { *t=j; temp=i; i=5; //不必再循环。 j=5; } return temp; //返回行数。 } /************************* *密码输出函数 **************************/ void out_put(int s0,int t0,int s1,int t1) { char c[2]={ }; if(s0==s1) //同一行。 { c[0]=book[s0][(t0+1)%5]; c[1]=book[s0][(t1+1)%5]; } else if(t0==t1) //同一列. { c[0]=book[(s0+1)%5][t0]; c[1]=book[(s1+1)%5][t0]; } else //不同行不同列. { c[0]=book[s0][t1]; c[1]=book[s1][t0]; } printf(%c,c[0]); //输出已加密的两个字符. printf(%c,c[1]); } /******************************** *对明文加密. *********************************/ void Encrypt() { char m[2]={ }; //明文数组. char temp,ch; char flag1,flag2; //用来标志上一轮中处理的第二个字母,提高解密精度. int s0,t0,s1,t1,i; //两个字符的位置参数. temp= ; //初始化为空字符. i=0; //控制变量. flag1=m[1]; //初始化. while((ch=getchar())!=\n) { if(ch== ) //如果输入的是空格跳过去. continue; if(ch==j) //如果输入的是j则当作i处理. ch=i; m[i++]=ch; //赋入数组. if(temp!= ) //如果上一步操作中有两个相同的字母. { m[1]=m[0]; m[0]=temp; temp= ; i=2; //标志变量,不必再输入下一个. } if(i!=2) //数组赋满,则跳过. continue; i=0; i

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档