凯撒密码和playfair密码-实验报告_第1页
凯撒密码和playfair密码-实验报告_第2页
凯撒密码和playfair密码-实验报告_第3页
凯撒密码和playfair密码-实验报告_第4页
凯撒密码和playfair密码-实验报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业一预习准备1. 实验目的 (1). 熟记古典对称密码的概念和特点;(2). 理解若干种古典密码体制的原理; (3). 掌握维吉尼亚及Playfair密码体制的编程实现。 2. 实验环境Widows7操作系统、Microsoft Visual Studio 2010 (选择自己熟悉的编程语言和环境)3. 实验内容和要求(1)实验内容实现维吉尼亚密码体制;实现Playfair密码体制。 (2) 实验要求1复习课本/课件相关内容。2程序中不能固定密钥词,即用户可自行输入密钥词

2、,然后对输入的明文进行加密,或对输入的密文进行解密二. 编程思路(实验原理)维吉尼亚密码原理:引入了“密钥”的概念,即根据密钥来决定用哪一行的密表来进行替换,以此来对抗字频统计。Playfair原理:根据下列规则一次对明文的两个字母加密: (1)、属于相同对中的重复的明文字母将用一个填充字母进行分隔,因此,词balloon将被加密为ba lx lo on。 (2)、属于该矩阵相同行的明文字母将由其右边的字母替代,而行的最后一个字母由行的第一个字母代替。例如,ar被加密为RM。 (3)、属于相同列的明文字母将由它下面的字母代替,而列的最后一个字母由列的第一个字母代替。例如,mu被加密为CM。 (

3、4)、否则,明文的其他字母将由与其同行,且与下一个同列的字母代替。因此,hs成为BP,ea成为IM(或JM,这可根据加密者的意愿而定)。 三. 实验总结 1. 实验程序(详细设计)维吉尼亚代码:#include#include#include#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

4、=0;i=A & 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数

5、组对应char ch55;/5X5矩阵char ch1N;/密钥char ch2N;/明文char ch4;/无关字符int len=a-A;coutch1;int flg=1;while(flg=1)for(int i=0;iz|ch1ia)cout请重新选择操作:endl;flg=0;break;elsech1i=ch1i-len; if(flg=1)for(i=0;istrlen(ch1);i+)if(ch1i=J)ch1i=I;i=0;int j=0;for(int k=0;kstrlen(ch1);k+)for(int t=0;t25;t+)if(ch1k=letterst&flag

6、t=0)chij=letterst;flagt=1;if(j4)j+;else i+;j=0;for( k=0;k25;k+)if(flagk=0)chij=lettersk;flagk=1;if(j4)j+;elsei+;j=0;cout密钥填充后的矩阵为: endl;for(i=0;i5;i+) for(j=0;j5;j+)coutchij;cout ;if(j=4)coutendl;coutendl;coutch2;coutch4;if(ch4=a)ch4=ch4-len;for(k=0;k=a)ch2k=ch2k-len;for(k=0;kstrlen(ch2);k+)/把明文中的J都

7、变为Iif(ch2k=J)ch2k=I;/为明文添加必要的无关字符以防止同一组的两个字符相同for( k=0;kk;t-)ch2t+1=ch2t;ch2k+1=ch4;/若明文有奇数个字符,则添加一个无关字符以凑够偶数个if(strlen(ch2)%2!=0)ch2strlen(ch2)+1=ch2strlen(ch2);/字符串结尾赋0ch2strlen(ch2)=ch4;/明文串尾插入无关字符cout经过处理后的明文为:;for(k=0;kstrlen(ch2);k+=2)coutch2kch2k+1 ;coutendl;cout其最终长度为:strlen(ch2)endl;/明文输入并整

8、理完毕/for(k=0;kstrlen(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;n24)n1=n1%5;m1=m1+1;if(n24)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

9、=chm1n2;ch2k+1=chm2n1;cout加密后所得到的密文是:;for(k=0;kstrlen(ch2);k+=2)coutch2kch2k+1 ;coutendl;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 c

10、h1N;/密钥char ch2N;/密文int len=a-A;int flg=1;coutch1;while(flg=1)for(int i=0;iz|ch1ia)cout请重新选择操作:endl;flg=0;break;elsech1i=ch1i-len; if(flg=1)for(i=0;istrlen(ch1);i+)/把密钥中的J都变为Iif(ch1i=J)ch1i=I;i=0;int j=0;/把密钥中的字母填入到矩阵中,并把该字母标记为已用for(int k=0;kstrlen(ch1);k+)for( int t=0;t25;t+)if(ch1k=letterst&flagt=

11、0)chij=letterst;flagt=1;if(j4)j+;else i+;j=0;for( k=0;k25;k+)/按字母表顺序把未用字母依次填入到矩阵中if(flagk=0)chij=lettersk;flagk=1;if(j4)j+;elsei+;j=0;cout密钥填充后的矩阵为: endl;for(i=0;i5;i+)for(j=0;j5;j+)coutchij;cout ;if(j=4)coutendl;coutendl;/矩阵生成完毕/int f=0;docoutch2;for(int k=0;k=a)ch2k=ch2k-len;for( k=0;kstrlen(ch2);

12、k+)/把密文中的J都变为Iif(ch2k=J)ch2k=I;for( k=0;kstrlen(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;kstrlen(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;n24)n1=n1%5;m1=m1+1;if(n24)n2=n2%5;m2=m2+1;if(m1=m2)ch2k=chm1(n1+4)%5;ch2k+1=chm2(n2+4)%5;elsei

温馨提示

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

评论

0/150

提交评论