Атака с помощью Caeser Cipher Brute Force не будет расшифрована - Python - PullRequest
0 голосов
/ 15 января 2019

Я пытался создать программу для атаки методом грубой силы, которая будет принимать ввод зашифрованного сообщения Цезаря и пытаться сломать его без коэффициента ротации. Выходными данными должен быть список всех 26 коэффициентов вращения с соответствующими сообщениями (например: KEY # 01: (смещение входных символов на 1 и т. Д.)), И один из них должен содержать дешифрованное сообщение. Номер ротации этого сообщения будет тогда ключевым (надеюсь, это не слишком запутало). Вот мой код:

message = input("Enter a message: ") # user inputs message
    offset = 0

    while offset < 26:
        for char in message:
            decrypt = " "

            if not char.isalpha(): # to keep punctuation unchanged
                decrypt = decrypt + char

            elif char.isupper():
                decrypt = decrypt + chr((ord(char) - offset - 65) % 26 + 65) # -65 +65 for uppercase Z

            else:
                decrypt = decrypt + chr((ord(char) - offset - 97) % 26 + 97) # -97 +97 for lowercase z

            offset = offset + 1
            print ("KEY #:", offset, message)

Программа не расшифровывает ввод и по какой-то причине печатает один и тот же ввод 41 раз ... Я не очень опытный программист, поэтому было бы здорово, если бы кто-нибудь мне помог.

Ответы [ 2 ]

0 голосов
/ 15 января 2019
message = input("Enter a message: ") # user inputs message
    offset = 0 # setting offset to 0

    for offset in range(len(message)): # for loop to run as many times as length of message

        decrypt = " "
        for char in message:

            if not char.isalpha(): # to keep punctuation unchanged
                decrypt = decrypt + char

            elif char.isupper():
                decrypt = decrypt + chr((ord(char) - offset - 65) % 26 + 65) # -65 +65 for uppercase Z

            else:
                decrypt = decrypt + chr((ord(char) - offset - 97) % 26 + 97) # -97 +97 for lowercase z

        print ("KEY #:", offset, decrypt)
0 голосов
/ 15 января 2019

У вашего скрипта есть три проблемы: offset = offset + 1 находится внутри вашего цикла for, поэтому offset увеличивается для каждого персонажа, который вам не нужен. И ваша инициализация переменной decrypt также находится внутри цикла. Наконец, вы печатаете message, а не decrypt результат.

Это работает:

message = input("Enter a message: ")  # user inputs message
offset = 0

while offset < 26:
    decrypt = ""
    for char in message:
        if not char.isalpha():  # to keep punctuation unchanged
            decrypt = decrypt + char

        elif char.isupper():
            decrypt = decrypt + chr((ord(char) - offset - 65) % 26 + 65)  # -65 +65 for uppercase Z

        else:
            decrypt = decrypt + chr((ord(char) - offset - 97) % 26 + 97)  # -97 +97 for lowercase z

    offset = offset + 1
    print("KEY #:", offset, decrypt)
...