1、 Veneral密码通用的编程方式为先将Vigeneral密码表写出来,再通过查表的方式给出。我们这个题目如果大家觉得麻烦,可以直接利用公式m_i+k_i求出密文c_i
#include<string.h>
#include<iostream>
using namespace std;
int main(){
while (1){
int ch, i, j;
cout << "密码学实验6\n";
cout << "1.加密\n";
cout << "2.解密\n";
cout << "3.退出\n";
cin >> ch;
if (ch == 1){
char key0[10];
int key1[10];
char ming[100];
char secret[100];
cout << "请输入密钥" << endl;
cin >> key0;
cout << "转换后的密钥为:";
for (i = 0; i < strlen(key0); i++){
key1[i] = (int)key0[i] - 'a';
cout << key1[i] << " ";
}
cout << endl;
cout << "请输入明文:";
cin >> ming;
cout << "密文为:";
for (i = 0; i < strlen(ming); i++){
secret[i] = (((int)ming[i] - 'a')+key1[i%strlen(key0)])%26+'A';
cout << secret[i] ;
}
cout << endl;
}
else if (ch == 2){
char key0[10];
int key1[10];
char ming[100];
char secret[100];
cout << "请输入密钥" << endl;
cin >> key0;
cout << "转换后的密钥为:";
for (i = 0; i < strlen(key0); i++){
key1[i] = (int)key0[i] - 'a';
cout << key1[i] << " ";
}
cout << endl;
cout << "请输入明文:";
cin >> secret;
cout << "密文为:";
for (i = 0; i < strlen(secret); i++){
ming[i] = (((int)secret[i] - 'A') - key1[i%strlen(key0)] + 26) % 26 + 'a';
cout << ming[i];
}
cout << endl;
}
else if(ch==3){
return 0;
}
else{
cout << "输入有误\n";
}
}
system("pause");
}