Secret Codes
Our second challenge is to decode a message written in a secret code. We'll look at substitution ciphers, in which each letter is replaced by another. The description of what replaces what is called the key, which we can represent as a string of 26 letters; the first letter replaces "a", the second replaces "b", and so on. Here is the function to encode a message with a substitution cipher key (the Python library functions maketrans and translate do most of the work):
defencode(msg, key): "Encode a message with a substitution cipher." return msg.translate(string.maketrans(ul(alphabet), ul(key))) deful(text): return text.upper( ) + text.lower( )alphabet= 'abcdefghijklmnopqrstuvwxyz'
Perhaps the simplest of all codes is the shift cipher, a substitution cipher in which each letter in the message is replaced by the letter n letters later in the alphabet. If n = 1, then "a" is replaced by "b" and "b" is replaced by "c", up to "z", which is replaced by "a". Shift ciphers are also called Caesar ciphers; they were state-of-the-art in 50 BC. The function shift encodes with a shift cipher:
def shift(msg, n=13):
"Encode a message with a shift (Caesar) cipher."
return encode(msg, alphabet[n:]+alphabet[:n])We use the function like this:
>>> shift('Listen, do you want to know a secret?')
'Yvfgra, qb lbh jnag gb xabj n frperg?'
>>> shift('HAL 9000 xyz', 1)
'IBM 9000 yza'To decode a message without knowing the key, we follow the same methodology we did with segmentations: define a ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access