Question
Write in C++ Task 1 and 2 have been completed. Just need Tasks 3 and 4 Introduction The Caesar cipher is a substitution cipher where
Write in C++
Task 1 and 2 have been completed. Just need Tasks 3 and 4
Introduction
The Caesar cipher is a substitution cipher where each letter in the original message (called the plaintext) is replaced with a letter corresponding to a certain number of letters up or down in the alphabet. The encrypted message (ciphertext) is not easily readable.
For example, heres the Caesar Cipher encryption of a message, using a left shift of 3.
Plaintext:
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
Ciphertext:
QEB NRFZH YOLTK CLU GRJMP LSBO QEB IXWV ALD
It is straightforward to recover the original message by using the opposite shift.
Task 1 (Weightage 25%)
You are asked to write a program that takes a shift value between +/- 26 and aplaintextmessage (no spaces) and returns the correspondingciphertext. The program should also implement a decryption routine that reconstructs the originalplaintextfrom theciphertext.
Example usage
$ ./caesar
Enter shift +/- 26: -3
Enter plaintext message (A-Z only, no spaces): THE
ciphertext: QEB
plaintext: THE
or
$ ./caesar
Enter shift +/- 26: 1
Enter plaintext message (A-Z only, no spaces): ZZZ
ciphertext: AAA
plaintext: ZZZ
We assume that the user message only consists of uppercase English alphabet (A-Z).
Task 2 (Weightage 25%)
You are now to extend the above program to take as inputs files. The program should be able to read a file and encode or decode it as needed.
For the sake of simplicity, we assume that you only need tochangeletters [A-Z] in the file. You can safely ignore other letters in the file (i.e., keep those as is.)
Encrypting a file tocyphertext
Encrypt a file in.txt containing plaintext to a file out.txt containing ciphertext using shift . Flag -e here refers to encryption.
$ ./caesar -e in.txt out.txt
Example
Consider f1.txt
HELLO WORLD THIS IS AMAZING
WHY IS THIS SO AMAZING
I HAVE NO IDEA
11231
After running the following command
$ ./caesar -e 3 f1.txt f2.txt
File f2.txt looks like
KHOOR ZRUOG WKLV LV DPDCLQJ
ZKB LV WKLV VR DPDCLQJ
L KDYH QR LGHD
11231
Decrypting a file toplaintext
Decrypting a file in.txt containing ciphertext to a file out.txt containing plaintext using shift . Flag -d here refers to decryption.
$ caesar -d in.txt out.txt
Example
After running the following command
$ ./caesar -d 3 f2.txt f3.txt
File f3.txt looks like
HELLO WORLD THIS IS AMAZING
WHY IS THIS SO AMAZING
I HAVE NO IDEA
11231
Task 3 (Weightage 25%)
Now change the code such that the following commands work as intended. Notice here we are using IO redirection to specify input and output files/streams.
Encryption
$ ./caesar -e 3 f2.txt
and
$ cat f1.txt | ./caesar -e 3 > f2.txt
Decryption
$ ./caesar -d 3 f3.txt
and
$ cat f2.txt | ./caesar -d 3 > f3.txt
Task 4 (Weightage 25%)
Thus far the program only handles capital letters A-Z. Now add support for small letters a-z and digits 0-9 Assume that for letters shift values are between -26 and +26 and for digits shift values are between -10 and +10. This program will support both input and output files and io redirection.
Usage
Say file in.txt contains
Good
dog
2
Then the following command create an output file as seen below
$ ./caesar -e 1 3 in.txt output.txt
Contents of output.txt file
Hppe
eph
5
Similarly, we can decrypt output.txt to create original.txt as follows
$ ./caesar -d 1 3 in.txt original.txt
The contents of the original.txt are
Good
dog
2
Program help
$ ./caesar -[e|d] [file-input] [file-ouput]
- `-e` refers to encryption
- `-d` refers to decryption
- `shift-letter` a value between -26 and +26
- `shift-digit` a value between -10 and +10
- `file-input` name of the input file. If none specified, read from `stdin`
- `file-output` name of the output file. If none specified, write to `stdout`
Code:
#include
#include
#include
#include
#include
using namespace std;
// get the ciphered text
string encrypt(string str, int);
// decrypt the cipher text
string decrypt(string str, int);
int main(int argc, char* argv[])
{
if (argc != 5)
{
cout
\"
cout
is -e or -d for encrypt or decrypt respectively\"
cout
cout
cout
return 1;
}
bool encryptFlag = false;
//check whethere we have to encrypt or decrypt
if (strcmp(argv[1], \"-e\") == 0)
encryptFlag = true;
else
encryptFlag = false;
//get the no. of shift
int n = atoi(argv[2]);
ifstream infile(argv[3]);
ofstream outfile(argv[4]);
if (infile.fail())
{
cout
return 1;
}
if (outfile.fail())
{
cout
return 1;
}
string line;
string converted;
while (getline(infile, line))
{
if (encryptFlag)
converted = encrypt(line, n);
else
converted = decrypt(line, n);
outfile
}
cout
infile.close();
outfile.close();
return 0;
}
// get the ciphered text
string encrypt(string str, int n)
{
int i;
for (i = 0; i
{
// get the ascii code
int ascii = (int)str[i];
if (ascii >= 'A' && ascii =>
{
ascii = ascii + n;
if (ascii
ascii = 91 - (65 - ascii);
else if (ascii > 90)
ascii = 64 + (ascii - 90);
// update the character with the ciphered text
str[i] = (char)ascii;
}
}
return str;
}
// decrypt the cipher text
string decrypt(string str, int n)
{
int i;
for (i = 0; i
{
// get the ascii code
int ascii = (int)str[i];
if (ascii >= 'A' && ascii =>
{
ascii = ascii - n;
if (ascii
ascii = 91 - (65 - ascii);
else if (ascii > 90)
ascii = 64 + (ascii - 90);
// update the character with the ciphered text
str[i] = (char)ascii;
}
}
return str;
}
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started