Question & Answer: How would you create a C++ program to do encoding and decoding of messages using the Vignere cipher usin…..

How would you create a C++ program to do encoding and decoding of messages using the Vignere cipher using public and private classes?  The message to be encoded must only consist of uppercase letters and the keyword should also be only upercase. Whitespace should not alter the encryption, so if you were encoding three words, the output should be the same regardless of the words being entered on one line or three. The program should require exactly two command line arugments. The first will either be the code “-e” or “-d” to indicate ecoding or decoding of a message (this determines adding or subtracting your shift values) and the second paramter will be a single word that will be the keyword that you use for the encryption or decryption.

To test, encoding “This is a test.” using keyword CSELEVEN would output “VZMDMNEGGKX”

Expert Answer

 

Given below is the code for the question. Please do rate the answer if it helped. Thank you.

#include <iostream>
#include <cctype>
using namespace std;
class VignereCipher
{
string key;

public:
VignereCipher(string key);
string encode(string message);
string decode(string message);
};

VignereCipher::VignereCipher(string key)
{
this->key = “”;
for(int i = 0; i < key.size(); i++)
this->key += toupper(key[i]);

}

string VignereCipher::encode(string msg)
{
int k = 0;
string encoded = “”;
int M, C;
char ch;
for(int i = 0; i < msg.size(); i++)
{
M = toupper(msg[i]) – ‘A’;
if(M >= 0 && M < 26)
{
C = key[k] – ‘A’;
ch = ‘A’ + ( M + C) % 26;
encoded += ch;
k = (k + 1) % key.length();
}
}
return encoded;
}

string VignereCipher::decode(string msg)
{
int k = 0;
string decoded = “”;
int M, C;
char ch;
for(int i = 0; i < msg.size(); i++)
{
M = toupper(msg[i]) – ‘A’;
if(M >= 0 && M < 26)
{
C = key[k] – ‘A’;
ch = ‘A’ + ( M – C + 26) % 26;
decoded += ch;
k = (k + 1) % key.length();
}
}
return decoded;
}

int main(int argc, char *argv[])
{
if(argc != 3)
{
cout << “usage: ” << argv[0] << ” <-e or -d> <key>” << endl;
return 1;
}
string key = string(argv[2]);
VignereCipher vc(key);
string mode = string(argv[1]);
string msg;
cout << “Enter the message: “;
getline(cin, msg );

if(mode == “-e”)
cout << “encoded message: ” << vc.encode(msg) << endl;
else if(mode == “-d”)
cout << “decoded message: ” << vc.decode(msg) << endl;
else
cout << “mode can be -d or -e only.” << endl;

}

output

./a.out -e CSELEVEN
Enter the message: This is a test
encoded message: VZMDMNEGGKX

========

./a.out -d CSELEVEN
Enter the message: VZMDMNEGGKX
decoded message: THISISATEST

Still stressed from student homework?
Get quality assistance from academic writers!