Source code for CrackingCodes.Ch10.transpositionFileCipher

"""Transposition Cipher Encrypt/Decrypt File

Implements a transposition cipher that can encrypt/decrypt a file.

Note:
    https://www.nostarch.com/crackingcodes/ (BSD Licensed)
"""

import time
import os
import sys
from pythontutorials.books.CrackingCodes.Ch07.transpositionEncrypt import encryptMessage
from pythontutorials.books.CrackingCodes.Ch08.transpositionDecrypt import decryptMessage


[docs]def main(): inputFilename = 'frankenstein.txt' # BE CAREFUL! If a file with the outputFilename name already exists, # this program will overwrite that file: outputFilename = 'frankenstein.encrypted.txt' myKey = 10 myMode = 'encrypt' # Set to 'encrypt' or 'decrypt' # If the input file does not exist, the program terminates early: if not os.path.exists(inputFilename): print('The file %s does not exist. Quitting...' % inputFilename) sys.exit() # If the output file already exists, give the user a chance to quit: if os.path.exists(outputFilename): print('This will overwrite the file %s. (C)ontinue or (Q)uit?' % outputFilename) response = input('> ') if not response.lower().startswith('c'): sys.exit() # Read in the message from the input file: fileObj = open(inputFilename) content = fileObj.read() fileObj.close() print('%sing...' % (myMode.title())) # Measure how long the encryption/decryption takes: startTime = time.time() if myMode == 'encrypt': translated = encryptMessage(myKey, content) elif myMode == 'decrypt': translated = decryptMessage(myKey, content) totalTime = round(time.time() - startTime, 2) print('%sion time: %s seconds' % (myMode.title(), totalTime)) # Write out the translated message to the output file: outputFileObj = open(outputFilename, 'w') outputFileObj.write(translated) outputFileObj.close() print('Done %sing %s (%s characters).' % (myMode, inputFilename, len(content))) print('%sed file is %s.' % (myMode.title(), outputFilename))
# If transpositionCipherFile.py is run (instead of imported as a module), # call the main() function: if __name__ == '__main__': main()