def main():
    random.seed(42)  # set the random "seed" to a static value

    for i in range(20):  # run 20 tests
        # Generate random messages to test.

        # The message will have a random length
        message = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' * random.randint(4, 40)

        # Convert the message string to a list to shuffle it.
        message = list(message)
        random.shuffle(message)
        message = ''.join(message)  # Convert list to string

        print('Test #%s: "%s..."' % (i + 1, message[:50]))

        # Check all possible keys for each message.
        for key in range(1, len(message)):
            encrypted = transEncrypt.encryptMessage(key, message)
            decrypted = transDecrypt.decryptMessage(key, encrypted)

            # If message and decrypted don't match, display an error message
            # and quit.

            if message != decrypted:
                print('Mismatch with key %s and message %s.' % (key, message))
                print(decrypted)

                sys.exit()

    print('Transposition cipher test passed.')
def hackTransposition(message):
    print('Hacking...')

    # Python programs can be stopped at any time by pressing Ctrl-C (on Windows)
    # or Ctrl-D (on Mac and Linux)
    print('(Press Ctrl-C or Ctrl-D to quit at any time.)')

    # brute-force by looping through every possible key
    for key in range(1, len(message)):
        print('Trying key #%s...' % (key))

        decryptedText = transDecrypt.decryptMessage(key, message)

        if detectEnglish.isEnglish(decryptedText):
            # Check with user to see if the decrypted key has been found
            print()
            print('Possible encryption hack:')
            print('Key %s: %s' % (key, decryptedText[:100]))
            print()
            print('Enter D for done, or just press Enter to continue hacking:')
            response = input('> ')

            if response.strip().upper().startswith('D'):
                return decryptedText

    return None
def main():
    random.seed(42) # set the random "seed" to a static value

    for i in range(20): # run 20 tests
        # Generate random messages to test.

        # The message will have a random length
        message = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' * random.randint(4,40)

        # Convert the message string to a list to shuffle it.
        message = list(message)
        random.shuffle(message)
        message = ''.join(message) # Convert list to string

        print('Test #%s: "%s..."' % (i+1, message[:50]))

        # Check all possible keys for each message.
        for key in range(1, len(message)):
            encrypted = transEncrypt.encryptMessage(key, message)
            decrypted = transDecrypt.decryptMessage(key, encrypted)

            # If message and decrypted don't match, display an error message
            # and quit.

            if message != decrypted:
                print('Mismatch with key %s and message %s.' % (key, message))
                print(decrypted)

                sys.exit()

    print('Transposition cipher test passed.')
def hackTransposition(message):
    print('Hacking...')

    # Python programs can be stopped at any time by pressing Ctrl-C (on Windows)
    # or Ctrl-D (on Mac and Linux)
    print('(Press Ctrl-C or Ctrl-D to quit at any time.)')

    # brute-force by looping through every possible key
    for key in range(1, len(message)):
        print('Trying key #%s...' % (key))

        decryptedText = transDecrypt.decryptMessage(key, message)

        if detectEnglish.isEnglish(decryptedText):
            # Check with user to see if the decrypted key has been found
            print()
            print('Possible encryption hack:')
            print('Key %s: %s' % (key, decryptedText[:100]))
            print()
            print('Enter D for done, or just press Enter to continue hacking:')
            response = input('> ')

            if response.strip().upper().startswith('D'):
                return decryptedText

    return None
Exemple #5
0
def main():
    inputFilename = input('File name: ')

    # Be careful. Tis will overwrite that file
    myMode = input('Encrypt or decrypt: ')
    myMode = myMode.lower()
    myKey = int(input('Key: '))

    # This sets the file name
    if myMode == 'encrypt':
        outputFilename = inputFilename[:len(inputFilename) - 4] + '.encrypted.txt'

    if myMode == 'decrypt':
        outputFilename = inputFilename[:len(inputFilename) - 4] + '.decrypted.txt'

    # If the file does not exist, terminate 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 it 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()
    outputFilename = outputFilename

    print('Done %sing %s (%s characters).' % (myMode, inputFilename, len(content)))