欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    凯撒密码和playfair密码-实验报告(共11页).doc

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

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

    凯撒密码和playfair密码-实验报告(共11页).doc

    精选优质文档-倾情为你奉上一预习准备1. 实验目的 (1). 熟记古典对称密码的概念和特点;(2). 理解若干种古典密码体制的原理; (3). 掌握维吉尼亚及Playfair密码体制的编程实现。 2. 实验环境Widows7操作系统、Microsoft Visual Studio 2010 (选择自己熟悉的编程语言和环境)3. 实验内容和要求(1)实验内容1. 实现维吉尼亚密码体制;2. 实现Playfair密码体制。 (2) 实验要求1复习课本/课件相关内容。 2程序中不能固定密钥词,即用户可自行输入密钥词,然后对输入的明文进行加密,或对输入的密文进行解密二. 编程思路(实验原理)维吉尼亚密码原理:引入了“密钥”的概念,即根据密钥来决定用哪一行的密表来进行替换,以此来对抗字频统计。Playfair原理:根据下列规则一次对明文的两个字母加密: (1)、属于相同对中的重复的明文字母将用一个填充字母进行分隔,因此,词balloon将被加密为ba lx lo on。 (2)、属于该矩阵相同行的明文字母将由其右边的字母替代,而行的最后一个字母由行的第一个字母代替。例如,ar被加密为RM。 (3)、属于相同列的明文字母将由它下面的字母代替,而列的最后一个字母由列的第一个字母代替。例如,mu被加密为CM。 (4)、否则,明文的其他字母将由与其同行,且与下一个同列的字母代替。因此,hs成为BP,ea成为IM(或JM,这可根据加密者的意愿而定)。 三. 实验总结 1. 实验程序(详细设计)维吉尼亚代码:#include<stdio.h>#include<stdlib.h>#include<string.h>#define N 80int main(void)char messageN; int n,i; int length;printf("明文:");gets(message); printf("密钥:");scanf("%d",&n);printf("明文:"); puts(message); printf("n");length=strlen(message);for(i=0;i<length;i+)if(messagei>='A' && messagei<='Z')messagei=(messagei-'A')+n)%26+'A'else if(messagei>='a' && messagei<='z')messagei=(messagei-'a')+n)%26+'a'else continue;puts("密文:"); puts(message);printf("n");return 0;Playfair代码:void encrypt() int i,k;const int N=100;char letters26="ABCDEFGHIKLMNOPQRSTUVWXYZ"/用于填充矩阵int flag25=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;/字母是否已在矩阵中,与letters数组对应char ch55;/5X5矩阵char ch1N;/密钥char ch2N;/明文char ch4;/无关字符int len='a'-'A'cout<<"输入密钥:"cin>>ch1;int flg=1;while(flg=1)for(int i=0;i<strlen(ch1);i+)/把所输入的密钥转化为大写字母if(ch1i>'z'|ch1i<'a')cout<<"请重新选择操作:"<<endl;flg=0;break;elsech1i=ch1i-len; if(flg=1)for(i=0;i<strlen(ch1);i+)if(ch1i='J')ch1i='I'i=0;int j=0;for(int k=0;k<strlen(ch1);k+)for(int t=0;t<25;t+)if(ch1k=letterst&&flagt=0)chij=letterst;flagt=1;if(j<4)j+;else i+;j=0;for( k=0;k<25;k+)if(flagk=0)chij=lettersk;flagk=1;if(j<4)j+;elsei+;j=0;cout<<"密钥填充后的矩阵为: "<<endl;for(i=0;i<5;i+) for(j=0;j<5;j+)cout<<chij;cout<<" "if(j=4)cout<<endl;cout<<endl;cout<<"请输入明文(请输入英文字符):"cin>>ch2;cout<<"输入一个无关字符:"cin>>ch4;if(ch4>='a')ch4=ch4-len;for(k=0;k<strlen(ch2);k+)/把所输入的明文转化为大写字母if(ch2k>='a')ch2k=ch2k-len;for(k=0;k<strlen(ch2);k+)/把明文中的J都变为Iif(ch2k='J')ch2k='I'/为明文添加必要的无关字符以防止同一组的两个字符相同for( k=0;k<strlen(ch2);k+=2)if(ch2k=ch2k+1)for(int t=strlen(ch2);t>k;t-)ch2t+1=ch2t;ch2k+1=ch4;/若明文有奇数个字符,则添加一个无关字符以凑够偶数个if(strlen(ch2)%2!=0)ch2strlen(ch2)+1=ch2strlen(ch2);/字符串结尾赋'0'ch2strlen(ch2)=ch4;/明文串尾插入无关字符cout<<"经过处理后的明文为:"for(k=0;k<strlen(ch2);k+=2)cout<<ch2k<<ch2k+1<<" "cout<<endl;cout<<"其最终长度为:"<<strlen(ch2)<<endl;/明文输入并整理完毕/for(k=0;k<strlen(ch2);k+=2)int m1,m2,n1,n2;for(m1=0;m1<=4;m1+)for(n1=0;n1<=4;n1+)if(ch2k=chm1n1)break;if(ch2k=chm1n1)break;for(m2=0;m2<=4;m2+)for(n2=0;n2<=4;n2+)if(ch2k+1=chm2n2)break;if(ch2k+1=chm2n2)break;m1=m1%5;m2=m2%5;if(n1>4)n1=n1%5;m1=m1+1;if(n2>4)n2=n2%5;m2=m2+1;if(m1=m2)ch2k=chm1(n1+1)%5;ch2k+1=chm2(n2+1)%5;elseif(n1=n2)ch2k=ch(m1+1)%5n1;ch2k+1=ch(m2+1)%5n2;elsech2k=chm1n2;ch2k+1=chm2n1;cout<<"加密后所得到的密文是:"for(k=0;k<strlen(ch2);k+=2)cout<<ch2k<<ch2k+1<<" "cout<<endl;else break;/解密算法void decrypt() int i,k;const int N=100;char letters26="ABCDEFGHIKLMNOPQRSTUVWXYZ"/用于填充矩阵int flag25=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;/标记字母是否已在矩阵中,与letters数组对应char ch55;/5X5矩阵char ch1N;/密钥char ch2N;/密文int len='a'-'A'int flg=1;cout<<"输入密钥:"cin>>ch1;while(flg=1)for(int i=0;i<strlen(ch1);i+)/把所输入的密钥转化为大写字母if(ch1i>'z'|ch1i<'a')cout<<"请重新选择操作:"<<endl;flg=0;break;elsech1i=ch1i-len; if(flg=1)for(i=0;i<strlen(ch1);i+)/把密钥中的J都变为Iif(ch1i='J')ch1i='I'i=0;int j=0;/把密钥中的字母填入到矩阵中,并把该字母标记为已用for(int k=0;k<strlen(ch1);k+)for( int t=0;t<25;t+)if(ch1k=letterst&&flagt=0)chij=letterst;flagt=1;if(j<4)j+;else i+;j=0;for( k=0;k<25;k+)/按字母表顺序把未用字母依次填入到矩阵中if(flagk=0)chij=lettersk;flagk=1;if(j<4)j+;elsei+;j=0;cout<<"密钥填充后的矩阵为: "<<endl;for(i=0;i<5;i+)for(j=0;j<5;j+)cout<<chij;cout<<" "if(j=4)cout<<endl;cout<<endl;/矩阵生成完毕/int f=0;docout<<"请输入密文(英文字符):"cin>>ch2;for(int k=0;k<strlen(ch2);k+)/把所输入的密文转化为大写字母if(ch2k>='a')ch2k=ch2k-len;for( k=0;k<strlen(ch2);k+)/把密文中的J都变为Iif(ch2k='J')ch2k='I'for( k=0;k<strlen(ch2);k+=2)if(ch2k=ch2k+1)cout<<"同一分组中不能出现相同字符!请重新输入。"<<endl;f=1;break;else f=2;if(f=1)continue;if(strlen(ch2)%2!=0)cout<<"字符串不能为奇数个!请重新输入。"<<endl;f=1;else f=2;while(f=1);/解密开始for( k=0;k<strlen(ch2);k+=2)int m1,m2,n1,n2;for(m1=0;m1<=4;m1+)for(n1=0;n1<=4;n1+)if(ch2k=chm1n1)break;if(ch2k=chm1n1)break;for(m2=0;m2<=4;m2+)for(n2=0;n2<=4;n2+)if(ch2k+1=chm2n2)break;if(ch2k+1=chm2n2)break;m1=m1%5;m2=m2%5;if(n1>4)n1=n1%5;m1=m1+1;if(n2>4)n2=n2%5;m2=m2+1;if(m1=m2)ch2k=chm1(n1+4)%5;ch2k+1=chm2(n2+4)%5;elseif(n1=n2)ch2k=ch(m1+4)%5n1;ch2k+1=ch(m2+4)%5n2;elsech2k=chm1n2;ch2k+1=chm2n1;cout<<"解密后所得到的明文是:"for(k=0;k<strlen(ch2);k+=2)cout<<ch2k<<ch2k+1<<" "cout<<endl; else break;2. 实验结果运行程序,通过调用函数执行一系列所需要的操作,程序运行正常,截图如下:专心-专注-专业

    注意事项

    本文(凯撒密码和playfair密码-实验报告(共11页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开