Lab (Ceasar Cipher)

Programming Workshop 2 (CSCI 1061U)

Faisal Qureshi

Faculty of Science, UOIT

http://vclab.science.uoit.ca


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, here's 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 50%)

You are asked to write a program that takes a shift value between +/- 26 and a plaintext message (no spaces) and returns the corresponding ciphertext. The program should also implement a decryption routine that reconstructs the original plaintext from the ciphertext.

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 to change letters [A-Z] in the file. You can safely ignore other letters in the file (i.e., keep those as is.)

Encrypting a file to cyphertext

Encrypt a file in.txt containing plaintext to a file out.txt containing ciphertext using shift <shift>. Flag -e here refers to encryption.

$ cf -e <shift> 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

$ ./cf -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 to plaintext

Decrypting a file in.txt containing ciphertext to a file out.txt containing plaintext using shift <shift>. Flag -d here refers to decryption.

$ cf -d <shift> in.txt out.txt 

Example

After running the following command

$ ./cf -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

$ ./cf -e 3 < f1.txt > f2.txt

and

$ cat f1.txt | ./cf -e 3 > f2.txt

Decryption

$ ./cf -d 3 < f3.txt > f3.txt

and

$ cat f2.txt | ./cf -d 3 > f3.txt

Submission

Please submit part1.cpp, part2.cpp and part3.cpp files via Blackboard. Note that part3.cpp supports full functionality of part2.cpp in addition to io redirection.