Software Design and Implementation
A14: CaesarCipher
Ciphers and Cryptography
You may work alone or with a pair partner for this. If you work with a partner, be sure to follow good "pair-programming" practices. For this assignment you will be adding to a class.
Ciphers and a little history
Encryption has been in the news a great deal recently:- July 11, 2013: Microsoft handed the NSA access to encrypted messages
- December 21, 2013: Report: NSA Paid RSA $10M to Create 'Back Door' in Encryption Software
- March 12, 2014: Google is encrypting search globally. That’s bad for the NSA and China’s censors
- February 17, 2016: Apple, The FBI And iPhone Encryption: A Look At What's At Stake
"Google has begun routinely encrypting Web searches conducted in China, posing a bold new challenge to that nation’s powerful system for censoring the Internet and tracking what individual users are viewing online.
The company says the move is part of a global expansion of privacy technology designed to thwart surveillance by government intelligence agencies, police and hackers who, with widely available tools, can view e-mails, search queries and video chats when that content is unprotected."
Encryption and privacy are clearly big news. But, how do encryption and decryption work?
Suppose you intercepted an email between two people that was using some kind of encryption, thereby creating a cryptogram:
pyhv ngyvr owf nrjrw urovn omy yhv posbrvn qvyhmbs pyvsb yw
sbxn gywsxwrws, o wrt wosxyw, gywgrxjrf xw kxqrvsu, owf
frfxgosrf sy sbr dvydynxsxyw sbos okk lrw ovr gvrosrf rzhok.
wyt tr ovr rwmomrf xw o mvros gxjxk tov, srnsxwm tbrsbrv sbos
wosxyw, yv owu wosxyw ny gywgrxjrf owf ny frfxgosrf, gow kywm
rwfhvr. tr ovr lrs yw o mvros qosskr-pxrkf yp sbos tov. tr bojr
gylr sy frfxgosr o dyvsxyw yp sbos pxrkf, on o pxwok vrnsxwm
dkogr pyv sbynr tby brvr mojr sbrxv kxjrn sbos sbos wosxyw lxmbs
kxjr. xs xn oksymrsbrv pxssxwm owf dvydrv sbos tr nbyhkf fy
sbxn.
qhs, xw o kovmrv nrwnr, tr gow wys frfxgosr -- tr gow wys
gywnrgvosr -- tr gow wys bokkyt -- sbxn mvyhwf. sbr qvojr lrw,
kxjxwm owf frof, tby nsvhmmkrf brvr, bojr gywnrgvosrf xs, pov
oqyjr yhv dyyv dytrv sy off yv frsvogs. sbr tyvkf txkk kxsskr
wysr, wyv kywm vrlrlqrv tbos tr nou brvr, qhs xs gow wrjrv
pyvmrs tbos sbru fxf brvr. xs xn pyv hn sbr kxjxwm, vosbrv, sy
qr frfxgosrf brvr sy sbr hwpxwxnbrf tyvc tbxgb sbru tby pyhmbs
brvr bojr sbhn pov ny wyqku ofjowgrf. xs xn vosbrv pyv hn sy qr
brvr frfxgosrf sy sbr mvros sonc vrloxwxwm qrpyvr hn -- sbos
pvyl sbrnr bywyvrf frof tr socr xwgvronrf frjysxyw sy sbos gohnr
pyv tbxgb sbru mojr sbr kons phkk lronhvr yp frjysxyw -- sbos tr
brvr bxmbku vrnykjr sbos sbrnr frof nbokk wys bojr fxrf xw joxw
-- sbos sbxn wosxyw, hwfrv myf, nbokk bojr o wrt qxvsb yp
pvrrfyl -- owf sbos myjrvwlrws yp sbr drydkr, qu sbr drydkr, pyv
sbr drydkr, nbokk wys drvxnb pvyl sbr rovsb.
Looks like gibberish, right? Actually, what was used was a simple
cipher-substitution in which each letter ("a" through "z") in the
original text was replaced by a different, random one. The
cryptogram above, for example, has had every occurrence of the
letter 'e'
replaced with an 'r'
, every
occurrence of 'w'
by a 't'
, and so
forth. The word "tr"
, which is the sixth word in the
last paragraph, was therefore originally "we"
. The
trick is to find which letter substitution was used and you can then
reverse the process to get the original message.
Though not the first cipher, one of the simplest and most notable ciphers is the Caesar cipher, used by Julius Caesar to send messages to his generals during war. The cipher was simple; each letter is simply shifted in the alphabet by a number, which Caesar and the general would agree upon ahead of time. So a shift of +3 would equate to 'a' becoming 'd', 'b' would become 'e', and so on. The following Class demonstrates a Caesar cipher (be sure to download all files and place them in the same directory):
CRC Card for the CaesarCipher
|
The instructions
Modify the yourusername-cipher.py file to complete the following tasks:Caesar has two letters to send (be sure to download these files into the same directory as your code!):
Complete the code in main() to encrypt the above messages and generate two new encrypted files:
- cipher_to_friend_1.txt
- cipher_to_friend_2.txt
Caesar also has multiple letters from a friend which he needs to decrypt (again, be sure to download this file into the same directory as your code!). Here is one of these letters. Note that your code should be able to work with any letter which was encrypted using the Caesar cypher:
The CaesarCipher Class is incomplete; while the program can encrypt a message, the program should also be able to decrypt the message. Complete the following tasks related to decryption:- Complete the decrypt() function for decrypting the message inside the CaesarCipher Class.
- Once you've completed the decrypt function, make the correct calls in the main() function to construct a new CaesarCipher object and decrypt the message.
- Use the export_file() function to write your decrypted message to a file named "message_from_friend_3.txt"
- Be sure to modify the standard header at the top of your program with name, username, assignment number, purpose and acknowledgements.
- Use only meaningful Class, variable and function names.
- Use comments to clarify sections of code
- The highest level of the program (i.e., no indenting) must only contain the following:
- the header
- any import statements
- Class definitions
- a call to the main() function
When you are finished writing and testing your program, create a ZIP file named yourusersnames-A14.zip and submit the following to the A14 link on Moodle:
- yourusernames-A14-cipher.py
- cipher_to_friend_1.txt
- cipher_to_friend_2.txt
- message_from_friend_3.txt
Submitted files with incorrect filenames may not receive full credit because it makes grading more difficult for us and the TAs, so please check filenames carefully!