版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dyw_666666/article/details/82466894
置换只不过是一个简单的换位,每个置换都可以用一个置换矩阵Ek来表示。每个置换都有一个与之对应的逆置换Dk。置换密码的特点是仅有一个发送方和接受方知道的加密置换(用于加密)及对应的逆置换(用于解密)。它是对明文L长字母组中的字母位置进行重新排列,而每个字母本身并不改变。
代码实现:
#include<stdio.h>
#include<string.h>
int main()
{
char m[999999],c[999999],mm[999999];
int x[26],y[26];
int t,k,len;
printf("请输入你要输入的明文:");
scanf("%s",m);
len=strlen(m);
printf("\n");
printf("选择密钥长度:");
scanf("%d",&k);
t=k-len%k;
printf("\n");
printf("请输入你选择的密钥方式:\n");
for(int i=0; i<k; i++)
scanf("%d",&x[i]);
for(int i=0; i<k; i++)
scanf("%d",&y[i]);
for(int i=0; i<len+t+1; i++)
c[i]=m[(y[i-i/k*k]-1)+(i/k)*k];
for(int i=0; i<len+t+1; i++)
printf("%c",c[i]);
printf("\n");
return 0;
}