Chapter ? - Secret Code 1

secret1.py
  1. # Secret Code 1 - Simple Substitution Cipher
  2. MAX_KEY_SIZE = 26
  3. def main():
  4.     mode = getMode()
  5.     message = getMessage()
  6.     key = getKey()
  7.     
  8.     print 'Your translated text is:'
  9.     print getTranslatedMessage(mode, message, key)
  10.     
  11. def getMode():
  12.     mode = ''
  13.     while (mode not in 'encrypt e decrypt d'.split()):
  14.         print 'Do you wish to encrypt or decrypt a message?'
  15.         mode = raw_input()
  16.         mode = mode.lower()
  17.         if (mode not in 'encrypt e decrypt d'.split()):
  18.             print 'Enter either "encrypt" or "e" or "decrypt" or "d".'
  19.     return mode
  20. def getMessage():
  21.     print 'Enter your message:'
  22.     message = raw_input()
  23.     
  24.     return message
  25. def getKey():
  26.     key = 0
  27.     while (not (key >= 1 and key <= MAX_KEY_SIZE)):
  28.         print 'Enter the key number (1-%s)' % (MAX_KEY_SIZE)
  29.         key = int(raw_input())
  30.     return key
  31. def getTranslatedMessage(mode, message, key):
  32.     if mode in 'encrypt e'.split():
  33.         return encrypt(message, key)
  34.     if mode in 'decrypt d'.split():
  35.         return decrypt(message, key)
  36. def encrypt(message, key):
  37.     cipherText = ''
  38.     
  39.     for symbol in message:
  40.         if symbol.isalpha():
  41.             num = ord(symbol)
  42.     
  43.             if symbol.isupper():
  44.                 num -= ord('A')
  45.             elif symbol.islower():
  46.                 num -= ord('a')
  47.     
  48.             num += key
  49.             num = num % 26
  50.     
  51.             if symbol.isupper():
  52.                 num += ord('A')
  53.             elif symbol.islower():
  54.                 num += ord('a')
  55.     
  56.             cipherText += chr(num)
  57.         else:
  58.             cipherText += symbol
  59.     return cipherText
  60. def decrypt(message, key):
  61.     plainText = ''
  62.     
  63.     for symbol in message:
  64.         if symbol.isalpha():
  65.             num = ord(symbol)
  66.     
  67.             if symbol.isupper():
  68.                 num -= ord('A')
  69.             elif symbol.islower():
  70.                 num -= ord('a')
  71.     
  72.             num -= key
  73.             num = num % 26
  74.     
  75.             if symbol.isupper():
  76.                 num += ord('A')
  77.             elif symbol.islower():
  78.                 num += ord('a')
  79.     
  80.             plainText += chr(num)
  81.         else:
  82.             plainText += symbol
  83.     return plainText
  84. if __name__ == '__main__':
  85.     main()

Things Covered In This Chapter: