Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

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

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Mobile Communications

Authors: Jochen Schiller

2nd edition

978-0321123817, 321123816, 978-8131724262

More Books

Students also viewed these Programming questions

Question

What is a living will?

Answered: 1 week ago

Question

Define tenancy in common.

Answered: 1 week ago