Chapter ? - Secret Code 2
- # Secret Code 2 - Transpositional cipher
- import cryptoLib
- MAX_KEY_SIZE = 100
- def main():
- mode = cryptoLib.getMode()
- message = cryptoLib.getMessage()
- key = cryptoLib.getKey(MAX_KEY_SIZE)
-
- print 'Your translated text is:'
- print getTranslatedMessage(mode, message, key)
- def getTranslatedMessage(mode, message, key):
- if mode in 'encrypt e'.split():
- return encrypt(message, key)
- if mode in 'decrypt d'.split():
- return decrypt(message, key)
-
- def encrypt(message, key):
- message += ' ' * (key - (len(message) % key))
-
- # Create a list of lists.
- table = []
- for i in range(key):
- table.append([])
-
- # Start encrypting the data.
- column = 0
- for i in message:
- table[column].append(i)
- column += 1
- if column == key:
- column = 0
-
- # For debugging, display the table of columns:
- #for column in table:
- # print column
-
- ciphertext = ''
- for i in table:
- ciphertext += ''.join(i)
-
- return ciphertext
-
- def decrypt(message, key):
- # Decryption is the same as encryption, except with a different key.
- key = int( len(message) / key )
-
- if (len(message) - int(len(message)/key) * key) > 0:
- key += 1
- return encrypt(message, key)
-
- if __name__ == '__main__':
- main()
- def getMode():
- mode = ''
- while (mode not in 'encrypt e decrypt d'.split()):
- print 'Do you wish to encrypt or decrypt a message?'
- mode = raw_input()
- mode = mode.lower()
- if (mode not in 'encrypt e decrypt d'.split()):
- print 'Enter either "encrypt" or "e" or "decrypt" or "d".'
- return mode
- def getMessage():
- print 'Enter your message:'
- message = raw_input()
-
- return message
- def getKey(maxKeySize):
- key = 0
- while (not (key >= 1 and key <= maxKeySize)):
- print 'Enter the key number (1-%s)' % (maxKeySize)
- key = int(raw_input())
- return key
Things Covered In This Chapter: