Chapter ? - Secret Code 2

secret2.py
  1. # Secret Code 2 - Transpositional cipher
  2. import cryptoLib
  3. MAX_KEY_SIZE = 100
  4. def main():
  5.     mode = cryptoLib.getMode()
  6.     message = cryptoLib.getMessage()
  7.     key = cryptoLib.getKey(MAX_KEY_SIZE)
  8.     
  9.     print 'Your translated text is:'
  10.     print getTranslatedMessage(mode, message, key)
  11. def getTranslatedMessage(mode, message, key):
  12.     if mode in 'encrypt e'.split():
  13.         return encrypt(message, key)
  14.     if mode in 'decrypt d'.split():
  15.         return decrypt(message, key)
  16.     
  17. def encrypt(message, key):
  18.     message += ' ' * (key - (len(message) % key))
  19.     
  20.     # Create a list of lists.
  21.     table = []
  22.     for i in range(key):
  23.         table.append([])
  24.     
  25.     # Start encrypting the data.    
  26.     column = 0
  27.     for i in message:
  28.         table[column].append(i)
  29.         column += 1
  30.         if column == key:
  31.             column = 0
  32.     
  33.     # For debugging, display the table of columns:
  34.     #for column in table:
  35.     #    print column
  36.     
  37.     ciphertext = ''
  38.     for i in table:
  39.         ciphertext += ''.join(i)
  40.         
  41.     return ciphertext
  42.     
  43. def decrypt(message, key):
  44.     # Decryption is the same as encryption, except with a different key.
  45.     key = int( len(message) / key )
  46.     
  47.     if (len(message) - int(len(message)/key) * key) > 0:
  48.         key += 1
  49.     return encrypt(message, key)
  50.         
  51. if __name__ == '__main__':
  52.     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: