给出我的答案和程序
第一个密钥:PXLMVMSYDOFUYRVZWC TNLEBNECVGDUPAHFZZLMNYIH
第二个密钥:PFTGPMIYDGAXGOUFHKLLLMHSQDQOGTEWBQFGYOVUHWT
程序如下:为了编程的方便,程序中我用数字6带替了空格
#include <iostream.h>
#include <string.h>
//27个字符的维吉尼亚方案,第27个字符是空格
char table[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ6";
char VigeTable[28][28]={'0'};
char CipherText[]="ANKYODKYUREPFJBYOJDSPLREYIUNOFDOIUERFPLUYTS";
char PlainText1[]="MR6MUSTARD6WITH6THE6CANDLESTICK6IN6THE6HALL";
char PlainText2[]="MISS6SCARLET6WITH6THE6KNIFE6IN6THE6LIBRARY6";
void InitTable(int linenum, int offset)
{
for(int k=0;k<27;k++)
VigeTable[linenum][k]=table[(k+offset)%27];
}
int GetColumnNum(char c)
{
for(int i=0;i<27;i++)
{
if(table[i]==c)
return i;
else continue;
}
return -1;
}
int GetKeyLineNum(int ColumnNu,char c)
{
for(int j=0;j<27;j++)
{
if(VigeTable[j][ColumnNu]==c)
return j;
else continue;
}
return -1;
}
void GetKey(char PlainTexti[],int L)
{
int cnum,Lnum;
for(int p=0;p<L;p++)
{
cnum=GetColumnNum(PlainTexti
);
Lnum=GetKeyLineNum(cnum,CipherText
);
cout<<table[Lnum];
}
cout<<endl;
}
main()
{
int L1,L2,i;
L1=strlen(PlainText1);
L2=strlen(table);
for(int t=0;t<L2;t++)
{
InitTable(t,t);
}
GetKey(PlainText1,L1);
GetKey(PlainText2,L1);
}