信息安全加密解密

有没有人在啊,想请教下,信息安全加密解密
最新回答
奶茶

2024-06-01 02:24:30

2、周期换位密码
把明文中的字母按给定的顺序排在一个矩阵中,然后用另一种顺序选出矩阵中的字母来产生密文。例如,给定一个置换F=2、4、1、3,即按第2列、第4列、第1列、第3列的次序排列。
加密过程如下:
第一步,排列
1234
guangzhouisabeautifulcity
第二步,打断
1234
guan
gzho
uisa
beau
tifu
lcit
y###
第三步,周期换位
2413
unga
zogh
iaus
euba
iutf
ctli
##y#
第四步,产生密文
ungazoghiauseubaiutfctli##y#
////////////////////////////////////
#include <iostream.h>
#include <string.h>
#define N 4
void main()
{ int m,i,j;
char p1[80],p2[20][N],p3[20][N];
char pstr[]="guangzhouisabeautifulcity";
//用符号'#'填充明文
m=(strlen(pstr)/N+1)*N;
for(i=0;i<strlen(pstr);i++)
p1[i]=pstr[i];
for(i=strlen(pstr);i<m;i++)
p1[i]='#';
//打断
m=m/N;
for(i=0;i<m;i++)
for(j=0;j<N;j++)
p2[i][j]=p1[i*N+j];
//2413周期换位,产生密文
for(i=0;i<m;i++)
{
p3[i][0]=p2[i][1];
p3[i][1]=p2[i][3];
p3[i][2]=p2[i][0];
p3[i][3]=p2[i][2];
}
//输出
cout<<"\n明文:";
for(i=0;i<m*N;i++)
cout<<p1[i];
cout<<"\n密文:";
for(i=0;i<m;i++)
for(j=0;j<N;j++)
cout<<p3[i][j];
cout<<endl;
}
沁晚离殇

2024-06-01 05:37:41

#include <iostream.h>
#include <string.h>
#define N 4 //密钥宏定义为4
void main()
{ int m,i,j;
char p1[80],p2[20][N],p3[N][20];
char pstr[]="guangzhouisabeautifulcity";
//用符号'#'填充明文
if(strlen(pstr)%N!=0)
m=(strlen(pstr)/N+1)*N; //m是行数
else
m=(strlen(pstr)/N)*N;
for(i=0;i<strlen(pstr);i++)
p1[i]=pstr[i];
for(i=strlen(pstr);i<m;i++)
p1[i]='#';
//打断
m=m/N;
for(i=0;i<m;i++)
for(j=0;j<N;j++)
p2[i][j]=p1[i*N+j]; //一维数组存到二维数组
//列换位,产生密文
for(i=0;i<N;i++)
for(j=0;j<m;j++)
p3[i][j]=p2[j][i];
//输出
cout<<"\n明文:";
for(i=0;i<m*N;i++)
cout<<p1[i];
cout<<"\n密文:";
for(i=0;i<N;i++)
for(j=0;j<m;j++)
cout<<p3[i][j];
cout<<endl;
}

或者
#include <iostream.h>
#include <string.h>
#define N 4
void main()
{ int m,i,j;
char p1[80],p2[20][N],p3[20][N];
char pstr[]="guangzhouisabeautifulcity";
//用符号'#'填充明文
m=(strlen(pstr)/N+1)*N;
for(i=0;i<strlen(pstr);i++)
p1[i]=pstr[i];
for(i=strlen(pstr);i<m;i++)
p1[i]='#';
//打断
m=m/N;
for(i=0;i<m;i++)
for(j=0;j<N;j++)
p2[i][j]=p1[i*N+j];
//2413周期换位,产生密文
for(i=0;i<m;i++)
{
p3[i][0]=p2[i][1];
p3[i][1]=p2[i][3];
p3[i][2]=p2[i][0];
p3[i][3]=p2[i][2];
}
//输出
cout<<"\n明文:";
for(i=0;i<m*N;i++)
cout<<p1[i];
cout<<"\n密文:";
for(i=0;i<m;i++)
for(j=0;j<N;j++)
cout<<p3[i][j];
cout<<endl;
}