📄 playfair.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NUM 1000
int main()
{
int i,j,k=0,m,n,temp=0,length;
char key[NUM],voa[26];
char table[5][5];
char word[NUM];
//printf("%d",'z');
printf("密钥: ");
scanf("%s",key);
length=strlen(key);
for(i=0;i<length;i++)
{
if(key[i]=='j')
key[i]='i';
}
for(i=0;i<length;i++)
{
for(j=i+1;j<length;j++)
if(key[i]==key[j])
{
for(int t=j;t<length;t++)
{
key[t]=key[t+1];
}
j--;
length--;
}
if(j==1)
{
key[j]=0;
break;
}
}
// printf("%d\n",length);
for(i=0;i<26;i++)
{
voa[i]=65+i;
}
for(i=0;i<length;i++)
{
key[i]=key[i]-32;
}
char p;
int count=0;
for(i=0;i<26;i++)
{
p=voa[i];
for(j=0;j<length;j++)
{
if(p==key[j])
{
key[i+length]=p;
count+=1;
break;
}
//printf("%d",count);
}
if(j==length)
{
key[i+length-count]=p;
}
}
int u=0;
for(i=0;i<26;i++)
{
if(key[i]=='J')
{
for(u=i;u<26;u++)
{
key[u]=key[u+1];
}
}
if(key[i]=='I')
key[i]='*';
//printf("%c",word[i]);
}
temp=0;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
table[i][j]=key[j+temp];
printf("%c ",table[i][j]);
if(j==4)
{
temp+=5;
printf("\n");
}
}
}
printf("明文: ");
scanf("%s",word);
length=strlen(word);
//printf("%d\n",length);
int counter=0;
for(i=0;i<length;)
{
if(word[i]==word[i+1])
{
i+=1;
counter+=1;
}
else
i+=2;
}
//printf("1:%d\n",length+counter);
for(i=0;i<length+counter;i+=2)
{
if(word[i]==word[i+1])
{
for(j=length+counter-1;j>i+1;j--)
{
word[j]=word[j-1];
}
word[i+1]='x';
}
}
length=length+counter;
if(length%2!=0)
{
word[length]='x';
length+=1;
}
for(k=0;k<length;k++)
{
word[k]=word[k]-32;
}
for(i=0;i<length;i++)
{
if(word[i]=='I'||word[i]=='J')
{
word[i]='*';
}
}
count=0,k=0;
loop: for(i=0;i<5,k<length;i++)
{
//k=k-2;
for(j=0;j<5;j++)
{
for(m=0;m<5;m++)
{
for(n=0;n<5;n++)
{
if((table[i][j]==word[k])&&(table[m][n]==word[k+1])&&(i==m))
{
count=1;
word[k]=table[i][j+1];
word[k+1]=table[m][n+1];
if(j==4)
{
word[k]=table[i][0];
//break;
}
if(n==4)
{
word[k+1]=table[m][0];
//break;
}
//printf("1:%c %c %d",word[0],word[1],k);
//break;
//Sleep(1000);
k+=2;
if(count==1)
{
goto loop;
}
}
else if((table[i][j]==word[k])&&(table[m][n]==word[k+1])&&(j==n))
{
count=1;
word[k]=table[i+1][j];
word[k+1]=table[m+1][n];
if(i==4)
{
word[k]=table[0][j];
//break;
}
if(m==4)
{
word[k+1]=table[0][n];
//break;
}
//printf("2:%c %c",word[0],word[1]);
k+=2;
if(count==1)
{
goto loop;
}
}
else if((table[i][j]==word[k])&&(table[m][n]==word[k+1])&&(i!=m)&&(j!=n))
{
count=1;
word[k]=table[i][n];
word[k+1]=table[m][j];
//printf("3:%c %c",word[0],word[1]);
k+=2;
if(count==1)
{
goto loop;
}
}
}
}
}
}
printf("密文: ");
for(k=0;k<length;k++)
{
printf("%c ",word[k]);
}
printf("\n");
system("pause");
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -