置换密码 古典加密算法 信息安全

置换密码

置换密码算法的原理是不改变明文字符,而是按照某一规则重新排列消息中的比特或字符顺序,才而实现明文信息的加密。置换密码有时又称为换位密码。

矩阵换位法是实现置换密码的一种常用方法。它将明文中的字母按照给定的顺序安排在一个矩阵中,然后用根据密钥提供的顺序重新组合矩阵中的字母,从而形成密文。例如,明文为attackbeginsatfive,密钥为cipher,将明文按照每行6个字母的形式排在矩阵中,形成如下形式:

根据密钥cipher中各个字母在字母表中出现的先后顺序,给定一个置换:

根据上面的置换,将原有居住中的字母按照第1列、第4裂、第5裂、第3裂、第2列、第6列的顺序排列,则有下面的形式:

从而得到密文:abatgftetcnvaiikse

其解密过程是根据密钥的字母数作为列数,将密文按照列、行的顺序写出,再根据由密钥给出的矩阵置换产生新的矩阵,从而恢复明文。

#include

#include

usingnamespacestd;

voidjiami()

{

charstr[100];

charstr1[100];

chara[100];

cout<<"请输入您的密钥:"<

cin.get();//每次在重新输入前必须加这个!

cin.get(str,100);

cout<<"请输入您的明文:"<

cin.get();

cin.get(a,100);

intlen=strlen(str);

charb[100][100];

charc[100][100];

chard[100][100];

intj=0;

intt=0;

intj1;

intt1;

for(inti=0;a[i]!='\0';i++)

{

if(a[i]!=''){

b[j][t]=a[i];

c[j][t]=a[i];

t++;

if(t>=len)

{

t=0;

j++;

}

j1=j;

t1=t;

}

else{};

}

strcpy(str1,str);

for(inti=0;i

{

for(intj=0;j

{

if(str1[j]>str1[j+1])

{

charch=str1[j];

str1[j]=str1[j+1];

str1[j+1]=ch;

}

}

}

for(inti=0;i

{

for(intj=0;j

{

if(str[i]==str1[j])

{

for(intx=0;x

{

c[x][i]=b[x][j];

}

}

}

}

for(inti=0;i

{

strcpy(d[i],c[i]);

}

for(inti=0;i

{

for(intj=0;j

{

if(str[i]==str1[j])

{

for(intx=0;x

{

d[x][i]=c[x][j];

}

}

}

}

cout<<"经置换算法后的密文为:"<

for(inti=0;i

{

for(intj=0;j

cout<

}

}

voidjiemi()

{

charstr[100];

charstr1[100];

chara[100];

cout<<"请输入您的密钥:"<

cin.get();

cin.get(str,100);

cout<<"请输入您的密文:"<

cin.get();

cin.get(a,100);

intlen=strlen(str);

intlen1=strlen(a);

intle=len1/len;

charb[100][100];

charc[100][100];

chard[100][100];

intj=0;

intt=0;

for(inti=0;a[i]!='\0';i++)

{

if(a[i]!=''){

b[j][t]=a[i];

c[j][t]=a[i];

j++;

if(j>=le)

{

j=0;

t++;

}

}

else{};

}

strcpy(str1,str);

for(inti=0;i

{

for(intj=0;j

{

if(str1[j]>str1[j+1])

{

charch=str1[j];

str1[j]=str1[j+1];

str1[j+1]=ch;

}

}

}

for(inti=0;i

{

for(intj=0;j

{

if(str[i]==str1[j])

{

for(intx=0;x

{

c[x][i]=b[x][j];

}

}

}

}

for(inti=0;i

{

strcpy(d[i],c[i]);

}

for(inti=0;i

{

for(intj=0;j

{

if(str[i]==str1[j])

{

for(intx=0;x

{

d[x][i]=c[x][j];

}

}

}

}

cout<<"经置换算法解密后的明文为:"<

for(inti=0;i

{

for(intj=0;j

cout<

}

}

intmain()

{

intchoice;

cout<<"请输入您的选择:"<

cout<<"1.加密;2.解密;"<

cin>>choice;

switch(choice)

{

case1:

jiami();

break;

case2:

jiemi();

break;

default:

break;

}

//cout<

return0;

}

执行结果为:

你可能感兴趣的:(置换密码 古典加密算法 信息安全)