📄 playfair.cpp
字号:
#include<stdio.h>
#include<string.h>
int i,j,len,play[25];
char c,d,nams[20],namd[20],key[10],lab[128],flag[128],s[1024];
FILE *fds,*fdd;
main()
{ printf("\nkey?\n");
scanf("%s",&key);
printf("\nsrc?\n");
scanf("%s",nams);
printf("\ndst?\n");
scanf("%s",namd);
fds=fopen(nams,"r");
fdd=fopen(namd,"w");
for(i=0;i<128;i++) lab[i]=i;
len=strlen(key);
for(c=0,i=0;c<len;c++,i++)
if(key[c]!='j')
{ lab[key[c]]=i;
lab[key[c]-32]=i;
flag[key[c]]=1;
play[i]=key[c];
}
else {len--,i--;}
for(c='a',i=len;c<='z';c++)
if((!flag[c])&&(c!='j')&&(c!='J'))
{ lab[c]=i;
lab[c-32]=i;
play[i]=c;
i++;
}
lab['j']=lab['i'];
lab['J']=lab['i'];
for(i=0;i<=24;i++)
printf(" %c",play[i]);
for(c=fgetc(fds);c!=EOF;fputc(c,fdd),c=fgetc(fds))
{ if((c>='a')&&(c<='z')||(c>='A')&&(c<='Z'))
for(d=fgetc(fds),i=0;d!=EOF; d=fgetc(fds))
if((d>='a')&&(d<='z')||(d>='A')&&(d<='Z'))
{ if(lab[d]==lab[c])
{ if(lab['x']<lab[c])
{ d=play[lab['x']-lab['x']%5+lab[c]%5];
c=play[lab[c]-lab[c]%5+lab['x']%5];
}
else
{ c=play[lab[d]-lab[d]%5+lab[c]%5];
d=play[lab[c]-lab[c]%5+lab[d]%5];
}
fputc(d,fdd);
fputc(c,fdd);
}
else
{ if(lab[d]/5==lab[c]/5)
{ c=play[lab[d]-lab[d]%5+(1+lab[d])%5];
d=play[lab[c]-lab[c]%5+(1+lab[c])%5];
}
if(lab[d]%5==lab[c]%5)
{ c=play[(lab[d]+5)%25];
d=play[(lab[c]+5)%25];
}
else if(lab[d]<lab[c])
{ d=play[lab[d]-lab[d]%5+lab[c]%5];
c=play[lab[c]-lab[c]%5+lab[d]%5];
}
else
{ c=play[lab[d]-lab[d]%5+lab[c]%5];
d=play[lab[c]-lab[c]%5+lab[d]%5];
}
}
fputc(d,fdd);
fwrite(s,1,i,fdd);
break;
}
else { s[i]=d; i++;}
if(d==EOF) break;
}
fclose(fds);
fclose(fdd);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -