Как я могу отслеживать, какие комбинации были опробованы в методе грубой силы? - PullRequest
0 голосов
/ 10 февраля 2020

Я использую Python 3 для создания грубой силы Vigenere decipher-er. Коды Vigenere - это, как правило, сложение цепочек букв.

Я хочу, чтобы мой код работал так, чтобы пользователь вставлял любые ключи, которые он хочет (этот бит готов), буквы превращаются в их числа (также готовые) ) затем он складывает каждую пару ключей вместе (работая над этим, а также с чем мне нужна помощь) и распечатывает две клавиши и то, к чему они добавлены.

Чтобы сделать это, мне нужно иметь возможность сохранить отслеживать, какие пары ключей были добавлены вместе. Как я могу это сделать?

Кстати, мой текущий код таков. Я делаю это и для практики декодирования, и для программирования, поэтому я просто хочу, чтобы отслеживались добавленные пары ключей, а не вся программа.

#defines start variables
import math
alph = "abcdefghijklmnopqrstuvwxyz"
keyqty = int(input("how many keys?"))
listofkeys = []
listofindex = []
timer = 0

#gets keys
while True:
    if timer >= keyqty:
        break
    else:
        pass
    listofkeys.append(input("key: ").lower())
    timer += 1
tempkey = ""

#blank before key 
for item in listofkeys:
    listofindex.append("")
    for letter in item:
        listofindex.append(alph.find(letter)

timer = 0
newkey = False
key1index = []
key2index = []
endex = []
printletter = ""
doneadds = []

Очевидно, что для этого все еще нужны некоторые другие работа, но некоторая помощь будет оценена.

1 Ответ

1 голос
/ 10 февраля 2020

Вы можете использовать набор для быстрого поиска (амортизированное постоянное время).

tried = set()
for ...
   if word not in tried:
       try()
       tried.add(word)

или использовать itertools.product () для генерации испытаний без необходимости отслеживания из уже опробованных.

for password in itertools.product(alph, repeat=keyqty):
   try(password)
...