A31.Vigenère 密码 题解
2025-03-03 20:58:01
发布于:江苏
2阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
char a[26][26], A[26][26];
int main(){
//构造Vigenère密码表
for(int i=0;i<26;i++){
char st1='a'+i;
for(int j=0;j<26;j++){
if(st1>'z')st1='a';
a[i][j]=st1;
st1++;
}
}
for(int i=0;i<26;i++){
char st2='A'+i;
for(int j=0;j<26;j++){
if(st2>'Z')st2='A';
A[i][j]=st2;
st2++;
}
}
string k,sec;
cin>>k>>sec;
int G=sec.size()/k.size(),keyIndex=0;
//重组
for(int i=0;i<sec.size();i++){
char keyCh=k[keyIndex%k.size()],cipherChar=sec[i],p;
if(islower(cipherChar)){
for(int j=0;j<26;j++){
if(a[tolower(keyCh)-'a'][j]==cipherChar){
p='a'+j;
break;
}
}
}
else{
for(int j=0;j<26;j++){
if(A[toupper(keyCh)-'A'][j]==cipherChar){
p='A'+j;
break;
}
}
}
cout<<p;
keyIndex++;
}
return 0;
}
这里空空如也
有帮助,赞一个