计算机学院信安08-3班柴婷婷08083708实验目的:掌握多表古典加密方法。实验要求:能用高级语言实现古典加密方法。实验内容:多表古典加密方法主要有Playfair体制、Vigenere体制、Beaufor体制、Vernam体制和Hill体制,用高级语言实现其中一种体制的加密和解密算法。四、实验过程:1、Vigenere加密解密:维吉尼亚密码引入了“密钥”的概念,即根据密钥来决定用哪一行的密表来进行替换,以此来对抗字频统计。#include<iostream>#include<string>usingnamespacestd;constintN=26;charv[N][N]={{'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'}};intnumber(charx)//把行号字母对应到数字{chary='a';for(inti=0;i<N;i++){if(x==(y+i))returni;}}voidencryption(stringm,stringk)//加密{cout<<"明文:";cin>>m;cout<<"密钥:";cin>>k;intmlen,klen;mlen=();klen=();char*p,*q,*t;//明文,初始密钥,密钥串。把string换成charp=newchar[()+1];strcpy(p,());q=newchar[()+1];strcpy(q,());t=newchar[()+1];intj=0;for(inti=0;i<mlen;i++){t[i]=q[j];j++;j=j%klen;}//生成密钥cout<<"密文:";for(i=0;i<mlen;i++)cout<<v[number(t[i])][number(p[i])];cout<<endl;}voiddisencryption(stringc,stringk)//解密{cout<<"密文:";cin>>c;cout<<"密钥:";cin>>k;intclen,klen;clen=();klen=();char*p,*q,*t;//密文,初始密钥,密钥串。把string换成charp=newchar[()+1];strcpy(p,());q=newchar[()+1];strcpy(q,());t=newchar[()+1];intj=0;for(inti=0;i<clen;i++){t[i]=q[j];j++;j=j%klen;}//生成密钥cout<<"明文:";for(i=0;i<clen;i++)for(intj=0;j<N;j++)if(v[number(t[i])][j]==p[i]){cout<<char(j+97);break;}cout<<endl;}intmain(){for(inti=1;i<N;i++){for(intj=0;j<N;j++){v[i][j]=v[i-1][(j+1)%N];}//方阵初始化}cout<<"欢迎使用Vigenere加密!"<<endl<<endl;cout<<"请选择要进行的操作"<<endl;intflag;do{cout<<":"<<endl;cin>>flag;stringm,k;if(flag==1)encryption(m,k);elseif(flag==2)disencryption(m,k);elseif(flag!=1&&flag!=2&&flag!=3)cout<<"输入错误,请重新输入!";}while(flag!=3);return0;}运行结果:2、Playfair加解密算法描述:Playfair密码出现于1854年,它依据一个5*5的正方形组成的密码表来编写,密码表里排列有25个字母。如果一种语言字母超过25个,可以去掉使用频率最少的一个。英语中z使用最少,可以去掉它。法语一般去掉w或k,德语则是把i和j合起来当成一个字母看待。英语中z使用最少,可以去掉它。加密描述:第一步是编制密码表。在这个5*5的密码表中,共有5行5列字母。第一列(或第一行)是密钥,其余按照字母顺序。密钥是一个单词或词组,若有重复字母,可将后面重复的字母去掉。当然也要把使用频率最少的字母去掉。第二步整理明文。将明文每两个字母组成一对。如果成对后有两个相同字母紧挨或最后一个字母是单个的,就插
古典密码附截图和C 代码 来自淘豆网m.daumloan.com转载请标明出处.