Example #1
0
def breakNull(ciphertext):
    # The program needs to try keys of length 1 (such as '5'), of length 2 (such as '5 5'), and so on up to length MAX_KEY_LENGTH.
    # This is because the key '1 0' will decrypt differently than '1 0 0'.
    for trialKeyLength in range(1, MAX_KEY_LENGTH + 1):
        # We will be using the "list of int values" for of keys. The string form like '4 2 3' that we use in the original encryption program is used just because it makes it easier to type for the user.
        # We use list replication (multiplying a list value by an int value) to get the starting key.
        trialKey = [0] * trialKeyLength

        trialKey = getNextKey(trialKey)

        while trialKey != [0] * trialKeyLength:
            decryptedText = nullCipher.decryptMessage(ciphertext, trialKey)
            percentEnglish = round(transpositionBreaker.getEnglishCount(decryptedText) * 100, 2)
            if percentEnglish > 0:
                print('Key %s decrypts to %s%% English.' % (trialKey, percentEnglish))
            if percentEnglish >= 25:
                print()
                print('Possible encryption break:')
                print('Key ' + str(trialKey) + ': ' + decryptedText[:100])
                print()
                print('Enter D for done, or just press Enter to continue breaking:')
                response = input('> ')

                if response.upper().startswith('D'):
                    return decryptedText
            trialKey = getNextKey(trialKey)
    print('No decryptions found. Code breaking has failed.')
    return None
Example #2
0
def hackNull(ciphertext):
    # The program needs to try keys of length 1 (such as '5'), of length 2
    # (such as '5 3'), and so on up to length MAX_KEY_DIGITS.
    for keyLength in range(1, MAX_KEY_DIGITS + 1):
        for keyParts in itertools.product(range(MAX_KEY_NUMBER + 1), repeat=keyLength):
            key = []
            for digit in keyParts:
                key.append(str(digit))
            key = ''.join(key)

            decryptedText = nullCipher.decryptMessage(key, ciphertext)

            if not SILENT_MODE:
                print('Key %s: %s' % (key, decryptedText[:40]))

            if detectEnglish.isEnglish(decryptedText):
                print()
                print('Possible encryption hack:')
                print('Key: %s' % (key))
                print('Decrypted message: ' + decryptedText[:200])
                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 # failed to hack encryption
Example #3
0
def hackNull(ciphertext):
    # The program needs to try keys of length 1 (such as '5'), of length 2
    # (such as '5 3'), and so on up to length MAX_KEY_DIGITS.
    for keyLength in range(1, MAX_KEY_DIGITS + 1):
        for keyParts in itertools.product(range(MAX_KEY_NUMBER + 1),
                                          repeat=keyLength):
            key = []
            for digit in keyParts:
                key.append(str(digit))
            key = ''.join(key)

            decryptedText = nullCipher.decryptMessage(key, ciphertext)

            if not SILENT_MODE:
                print('Key %s: %s' % (key, decryptedText[:40]))

            if detectEnglish.isEnglish(decryptedText):
                print()
                print('Possible encryption hack:')
                print('Key: %s' % (key))
                print('Decrypted message: ' + decryptedText[:200])
                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  # failed to hack encryption