#include<bits/stdc++.h>
using namespace std;
string encry(string mes,int key){//替代密码加密
string c="";
for(int i=0;i<mes.length();i++){
c+=char((mes[i]-'a'+key)%26+'a');
}
return c;
}
string decry(string c,int key){//替代密码解密
string m="";
for(int i=0;i<c.length();i++){
m+=char((c[i]-'a'-key+26)%26+'a');
}
return m;
}
void func(char* a,char* b,int* pos){// 置换密码顺序
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
if(a[i]==b[j]){
pos[i]=j;
break;
}
}
}
return ;
}
bool cmp(char a,char b){
return a<b;
}
int main(){
int key1=9;
string key2="value";
string message="by order of the peaky blinders";
string mes="";
string c="";
string m="";
int len=message.length();
for(int i=0;i<len;i++){
if(message[i]!=' '){
mes+=message[i];
}
}
cout<<"原文:"<<message<<endl;
printf("去空:%s\n",mes.c_str());
cout<<"————1、替代密码————"<<endl;
cout<<"密钥:"<<key1<<endl;
c=encry(mes,key1);
printf("密文:%s\n",c.c_str());
m=decry(c,key1);
printf("解密:%s\n\n\n",m.c_str());
cout<<"————2、置换密码————"<<endl;
char mes2[5][5];
char k[5];
char f[5];
for(int i=0;i<key2.length();i++){
k[i]=key2[i];
}
strcpy(f,k);
cout<<"矩阵:"<<endl;
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
mes2[i][j]=mes[i*5+j];
cout<<mes2[i][j];
}
cout<<endl;
}
sort(f,f+5);
printf("密钥:%s\t排序:%s\n",k,f);
int pos[5];
func(k,f,pos);
cout<<"顺序:";
for(int i=0;i<5;i++){
cout<<pos[i]+1;
}
cout<<endl;
char c2[5][5];
cout<<"置乱:"<<endl;
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
c2[i][j]=mes2[i][pos[j]];
cout<<c2[i][j];
}
cout<<endl;
}
cout<<"密文:";
char mi[25];
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
mi[i*5+j]=c2[j][pos[i]];
cout<<c2[j][pos[i]];
}
cout<<" ";
}
cout<<endl;
cout<<"逆推置乱矩阵:"<<endl;
char jz[5][5];
for(int i=0;i<25;i++){
jz[i%5][pos[i/5]]=mi[i];
}
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
cout<<jz[i][j];
}
cout<<endl;
}
cout<<"逆推顺序矩阵:"<<endl;
char sx[5][5];
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
sx[i][pos[j]]=jz[i][j];
}
}
char jm[26];
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
jm[i*5+j]=sx[i][j];
cout<<sx[i][j];
}
cout<<endl;
}
jm[25]='\0';
printf("解密:%s",jm);
}
C++古典密码学(替代密码、置换密码
最新推荐文章于 2023-04-02 19:03:45 发布