Description
In this homework, you will be implementing the Caesar&Cipher encryption scheme. The Caesar
Cipher is a simple way of encrypting text so that it is not readable by the casual observer. The
encryption scheme gains its name from Julius Caesar who used several similar text substitution
algorithms to encrypt/decrypt important messages.
Caesar(Cipher(Encryption(
The Caesar Cipher is simple way to “encrypt” alphabetic(letters (aside: don t try encrypt
anything important with the Caesar Cipher). All remaining punctuation symbols, numeric digits,
or other characters (spaces) remain unchanged.
Encrypting a message using the Caesar Cipher involves replacing each letter in a message with
the letter k places further down the alphabet, wrapping around at the end of the alphabet when
necessary. With k&=&0, each letter is replaced by itself. With k&=&20, each letter is shifted 20 places
down the alphabet. To decode or decrypt the text you simply shift the encrypted letter in the
opposite direction by k places and wrap around as necessary.
The letters in the Caesar Cipher alphabet start at 0 and continue through 25, with the letter “A”
being 0 and “Z” being 25. If the user were to choose k&=&3, the letter “A” (0) would be replaced by
the letter “D” (3), while the letter “B” (1) would be replaced by the letter “E” (4). If a letter
appears towards the end of the alphabet, the alphabet simply wraps around and starts again. So
the letter “Z” (25) would be replaced by the letter “C” (25 + 3 = 28), which is 2 after wrapping
around. The “wrap around” math is accomplished simply using the “modulo” operator in Python
(%) which returns the remainder after integer division.
If x is the position of some letter we are trying to encrypt, it should be replaced by the letter at
the position denoted by (x&+&k)&%&26, which will be a number between 0 and 25. For the above
example, 25 + 3 = 28, and 28 % 26 = 2, or “C”. To decrypt you simply subtract k instead of adding:
(x&7&k)&%&26. To reverse the previous example we take the result “C” = 2, with a shift of 3, so (2[3)
% 26 = 25 giving us back the letter “Z”.&
Shifting(the(Letters(in(Python(
Recall (from Chapter 4) that our alphabet in Python is encoded using UTF[8 (see the table in the
slides or book), from Python s perspective “A” is not 0. Instead, an upper case “A” is represented
by the number 65, “B” by 66, and so on, with capital “Z” represented by 90. While a lower case
“a” is represented by the number 97, “b” by 98, and so on, with “z” represented by 122. Your
program will have to account for this when shifting the letters using the formula above. Note:(
your(program(should(not(change(the(case(of(the(original(text(or(message.
To obtain the UTF[8 values, you will need to use the built[in ord(char) function, which accepts
a string containing a single letter and returns the integer value of the letter. You will also need to
use the built[in chr(int) function which accepts an integer and returns the corresponding
Unicode/ASCII letter. The methods isupper() and islower() may also be useful.
Further, any remaining punctuation symbols, numeric digits, or other characters (spaces) should
be unmodified and remain unchanged in the message. Chapter 4 contains examples of how to
identify and skip these characters while encoding, as a hint you will need to import string.
Implementation(
Your program should begin by prompting the user for a message (a string), a shift amount (an
integer), and whether they would like to encrypt or decrypt, then our implementation will add
some variation to the basic algorithm to make it a little harder to decode. When encrypting:
(1) You ll replace each “e” character in the original message with the letters “zw”. If the user
enters “Hello World!”, the resulting message will be “Hzwllo World!”.
(2) After replacing the “e” characters, you ll add the word “hokie” to the beginning, middle
(the middle is length//2), and the end of the message. Continuing with example above the
message that s actually encrypted using the Caesar Cipher is “hokieHzwllohokie
World!hokie”.
Once you have the altered message then perform the Caesar Cipher encoding as described above,
printing the result.
When decrypting, perform each step in reverse order. Decrypt the message using the Caesar
Cipher, then remove the “hokie” strings, then change any occurrence of “zw” to “e”. You may
assume the all occurrences of “zw” in the result are really “e” characters, and further you may
assume the “hokie” strings are in the encrypted message at the appropriate place, however(
there(may(be(other(occurrences(of(“hokies”(in(the(original(message.
Finally, your program must be able to encrypt/decrypt an arbitrary number of messages. When
you ve completed the encrypting/decrypting a message the user should be asked if they want to
enter another message. Your program should continue until the user types “N”.
(
Sample(Execution(
The user input is green:
(
Enter Message: Hello World!
Enter shift amount: 3
Encode (E) or Decode (D)? E
Result: krnlhKczoorkrnlh Zruog!krnlh
Go again? (Y/N): Y
Enter Message: krnlhKczoorkrnlh Zruog!krnlh
Enter shift amount: 3
Encode (E) or Decode (D)? D
Result: Hello World!
Go again? (Y/N): N
What(to(Submit
For this assignment you should submit your hw4.py file.
This assignment will be graded automatically. Test your programs thoroughly before submitting
them. Make sure that your programs produce correct results for every logically valid test case
you can think of. Do not waste submissions on untested code, or on code that does not run with
the supplied code from the course website.
Web[CAT will assign a score based on runtime testing of your submission; your best score will be
counted; the TAs will later verify that your best submission meets the stated restrictions, and
assess penalties if not.