一种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
请问这个怎么做?????????????? 展开
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
请问这个怎么做?????????????? 展开
1个回答
展开全部
#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;
}
}
#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;
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询