Write a set of tools to create and decrypt substitution ciphers. In particular, perform monoalphabetic encryption and decryption using a permutation derived from a specified key phrase (Singh, page 13). For encryption, remove all non-alphabetic characters and print output in groups of 5.
The encryption is a one-line program in a shell script or Perl, so do it immediately (overnight) so you can produce ciphers for your classmates to try to break.
For decryption, print output in one long string of lower-case letters for ease of reading. Encrypt two samples of English prose with at least 200 characters using different keys. Prose can be anything that is not offensive, or engineered to be difficult to crack.
Debug your tools on your own input of course. Trade encrypted files with two classmates. When you get an encrypted file, break it and report your results.
Finally, here's a challenge from Greg Rubin (from 2004 course),
ho submits what he
swears is an aristocrat that is immensely long and
therefore should be easy. He says it's hard. Hint: it's a poem.
The Rubin Challenge. Greg's a smart guy, and
so this one might provide a more interesting story.
Some useful techniques:
Your cryptograms might have accompanying stories to provide probable words, or they might have no word boundaries (or disguised word boundaries), use telegraphic text, might avoid common words, etc.). Remember the Golden Rule and don't be too nasty, but on the other hand nobody will get the fun and credit of solving something clever if all the examples are too easy. You might rate the difficulty as "easy", "medium", "hard" when you distribute them.
In a TR-style manner describe your investigations and the process of solution. How did the tools you wrote help you? What other ideas for helpful tools do you have?
Chris Brown's code for patterns is a couple of 20-line PERL programs that get edited for each word. You could do the same thing in the UNIX shell with egrep, awk, or sed probably... Everything else is about 400 lines of lines of Matlab (maybe less: it's too boring to count exactly since I did a couple of versions of a lot of it).
This page is maintained by CB.
Last update: 29.7.01.