一种playfair密码变种加密方法如下:首先选择一个密钥单词(称为pair)(字母不重复,且都为小写字母)

2024年11月16日 15:39
有1个网友回答
网友(1):

  #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  if(key[i]==c)
  {
  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;
  }
  }