置换密码程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
for(i=0;i<m;i++)
{
printf("%c",Temp3[i*lenK+j]);
}
}
return 0;
}
附程序结果图:
}
printf("\n");
}
Temp1[lenM]='\0';
printf("\n第一次置换........\n\n");
for(i=0;i<lenK;i++)
{
for(j=0;j<m;j++)
{
Temp2[j*lenK+i]=Temp1[j*lenK+T[i]-1];
}
}
Temp2[lenM]='\0';
for(i=0;i<m;i++)
{
for(j=0;j<lenK;j++)
{
printf("%c ",Temp2[i*lenK+j]);
}
printf("\n");
}
printf("\n第二次置换........\n\n");
for(i=0;i<lenK;i++)
{
for(j=0;j<m;j++)
{
Temp3[j*lenK+i]=Temp2[j*lenK+T[i]-1];
{
temp+=1;
}
}
T[i]=lenK-temp;
printf("%d ",T[i]);
}
printf("\n\n明文矩阵........\n\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j+&#;j]=M[i*lenK+j];
printf("%c ",Temp1[i*lenK+j]);
置换密码
置换密码算法的原理是不改变明文字符,只将字符在明文中的排列顺序改变,从而实现明文信息的加密。置换密码有时又称为换位密码。
矩阵换位法是实现置换密码的一种常用方法。它将明文中的字母按照给的顺序安排在一个矩阵中,然后用根据密钥提供的顺序重新组合矩阵中字母,从而形成密文。例如,明文为attack begins at five,密钥为cipher,将明文按照每行6列的形式排在矩阵中,形成如下形式:
#define N 100
int main()
{
int i,j,lenK,lenM,m,n,temp;
int T[N];
char K[N],M[N],C[N],Temp1[N],Temp2[N],Temp3[N];
printf("------这是置换密码的程序------\n");
printf("请输入明文M::\n");
attack
be gins
a tfive
根据密钥cipher中各字母在字母表中出现的先后顺序,给定一个置换:
1 2 3 4 5 6
f =
1 4 5 3 2 6
根据上面的置换,将原有矩阵中的字母按照第1列,第4列,第5列,第3列,第2列,第6列的顺序排列,则有下面形式:
a act tk
b i nge s
}
}
Temp3[lenM]='\0';
for(i=0;i<m;i++)
{
for(j=0;j<lenK;j++)
{
printf("%c ",Temp3[i*lenK+j]);
}
printf("\n");
}
printf("\n");
printf("密文是......\n");
for(j=0;j<lenK;j++)
aIv f te
从而得到密文:abatgftetcnvaiikse
其解密的过程是根据密钥的字母数作为列数,将密文按照列、行的顺序写出,再根据由密钥给出的矩阵置换产生新的矩阵,从而恢复明文。
程序如下:
#include<stdio.h>
#include<math.h>
#include<string.h>
gets(M);
printf("请输入密钥K::\n");
gets(K);
lenK=strlen(K);
lenM=strlen(M);
m=lenM/lenK;
n=lenK;
for(i=0;i<lenK;i++)
{
temp=0;
for(j=0;j<lenK;j++)
{
if((int)K[i]<(int)K[j])
相关文档
最新文档