```--001636e90bac5245fa046b68d95e
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

There was some discussion on the mailing list about the objective of
the quiz, due to its enigmatic nature. After the no-spoiler period
expired, several people began contributing programs to explore the
cryptogram.

Ken Bloom provided a solution to decrypt a rotation cipher. A rotation
cipher is a simple substitution cipher where each letter is
substituted with the letter a fixed number of positions ahead in the
alphabet. An example of this is the Caeser Cipher[1] or ROT13[2]. This
quiz did not happen to be a rotation cipher, but the algorithm used to
encrypt the text was something along those lines.

Martin DeMello submitted an exploratory solution. His solution is well
commented and documents the process of trying out different
substitutions to crack the cipher.

There were attempts to use frequency analysis, which is frequently a
good strategy to employ in working towards a solution. However, the
original text contained the word 'quiz' three times, 'cryptogram'
twice and 'cryptography' once. It also contained the words 'rubyists'
and 'puzzle'. These particular inclusions in the small amount of text
skewed the distribution enough to make frequency analysis problematic.

Martin Boese was successfully able to crack the cryptogram. He counted
repeated sequences to gain insight into possible words in the cipher
text. In particular, the string `KOXMQJBOIG` appeared more than once.

The text was encoded using a substitution cipher[3] with the key
phrase 'ILKERUBY' to create a mixed alphabet. The cipher text alphabet
was created by removing the key phrase and prepending it to mix up the
letters: `@cipher_text_alphabet  eyword_array + (@alphabet -
keyword_array)`. Then each letter in the plain text message is
replaced by the corresponding letter in the cipher text alphabet.

Have you guessed what the long word that was repeated in the cipher
text was? It was `cryptogram`. The encrypted text was actually the
description of the quiz itself, though it wouldn't help much until it
is cracked.

Here's the original plain text message:

Hello Rubyists,

This week's quiz is a cryptography puzzle and if you are reading
this then you've already cracked it. Congratulations! It's called
Cryptogram II because quiz #13 was a cryptogram quiz as well.

[1]: http://en.wikipedia.org/wiki/Caesar_cipher
[2]: http://en.wikipedia.org/wiki/ROT13
[3]: http://en.wikipedia.org/wiki/Substitution_cipher

--001636e90bac5245fa046b68d95e
Content-Type: application/x-gzip; name="206.tar.gz"
Content-Disposition: attachment; filename="206.tar.gz"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_fvhfu4ni0

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