Chapter ? - Secret Code 3

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

Things Covered In This Chapter: