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

后与字母表中其他字母一起填入至一个5*5的方阵中,填入方法如下:1.首先按行填入密钥串。2.紧接其后,按字母序按行填入不在密钥串中的字母。3.由于方阵中只有25个位置,最... 后与字母表中其他字母一起填入至一个5*5的方阵中,填入方法如下:
1.首先按行填入密钥串。
2.紧接其后,按字母序按行填入不在密钥串中的字母。
3.由于方阵中只有25个位置,最后剩下的那个字母则不需要变换。
如果密钥为youandme,则该方阵如下:
y o u a n
d m e b c
f g h i j
k l p q r
s t v w x

请问这个怎么做??????????????
展开
 我来答
296961081
2011-07-05
知道答主
回答量:2
采纳率:0%
帮助的人:2.7万
展开全部
  #include<stdio.h>
  #include<string.h>
  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<strlen(yuanwen);i+=2)
  {
  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<n;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;
  }
  }
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式