#include
#include
int find(char *key,int n,char c);
char alph[26]={'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'};
void find_fang(char fang[5][5],char c1,int *i_1,int *j_1);
void main()
{
char key[25],yuanwen[50],miwen[50];
printf("\n请输入密钥(1~25):");
gets(key);
printf("\n请输入原文(1~50):");
gets(yuanwen);
char fang[5][5];
int i,j,k=0,len,t=0;
len=strlen(key);
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
if(key[k]!='\0')
{
fang[i][j]=key[k];
k++;
}
else
{
while(find(key,len,alph[t]))
t++;
fang[i][j]=alph[t];
t++;
}
}
char t1,t2;
int i_1=-1,j_1=-1,i_2=-1,j_2=-1;
for(i=0;i
t1=yuanwen[i];
t2=yuanwen[i+1];
if(t1==t2||t2=='\0')
{
miwen[i]=t1;
miwen[i+1]=t2;
}
else
{
find_fang(fang,t1,&i_1,&j_1);
find_fang(fang,t2,&i_2,&j_2);
if(i_1==-1||j_1==-1||i_2==-1||j_2==-1)
{
miwen[i]=t1;
miwen[i+1]=t2;
}
else if(i_1==i_2||j_1==j_2)
{
miwen[i]=t2;
miwen[i+1]=t1;
}
else
{
miwen[i]=fang[i_1][j_2];
miwen[i+1]=fang[i_2][j_1];
}
}
}
printf("加密后的密文为:");
puts(miwen);
}
int find(char *key,int n,char c)
{
int i,flag=0;
for(i=0;i
{
flag=1;
break;
}
return flag;
}
void find_fang(char fang[5][5],char c1,int *i_1,int *j_1)
{
int i,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(fang[i][j]==c1)
{
*i_1=i;
*j_1=j;
break;
}
}