def rotated(n: int):
'''Returns a rotated letter if parameter is greater than 26'''
ALPHABET = 'abcdefghijklmnopqrstuvwxyz'
if n>= 26:
n %= 26
return ALPHABET[n:26] + ALPHABET[:n]
assert rotated(0) == 'abcdefghijklmnopqrstuvwxyz'
assert rotated(26) == 'abcdefghijklmnopqrstuvwxyz'
Функция, приведенная выше, заключается в сбросе алфавита, если заданное целое число больше 26 (поэтому буква z с ключом 1 будет равна а).Декодирование зашифрованного текста Brute Force
def Caesar_decrypt(text: str, key: int) -> str:
'''Returns a decryption of parameter text and key'''
text = text.lower()
key_to_zero = str.maketrans(rotated(key),rotated(0))
return text.translate(key_to_zero)
assert Caesar_decrypt('Cat', 29) == Caesar_decrypt('Cat', 3)
assert Caesar_decrypt('Good night', 0) == 'good night'
Caesar_decrypt затем выполняет повернутую функцию для дешифрования заданной текстовой строки с заданным ключом. Тем не менее, я пытаюсь расшифровать данный текст БЕЗ ключа, который будет моей следующей функцией: Caesar_break.
word = open('wordlist.txt', 'r')
dictionary = word.readlines()
def Caesar_break(code: str) -> str:
alist = []
for x in range(26):
a = Caesar_decrypt(code, x)
alist += a
for i in dictionary:
if i in alist:
return i
*** Примечание: wordlist.txt - это всего лишь документ со всеми словарями. См. http://www.ics.uci.edu/~kay/wordlist.txt. Поэтому мне было интересно, почему, когда я тестировал код Caesar_break, окно оболочки ничего не возвращает. Как я могу исправить код? Благодаря!
Если мои слова сбивают с толку, это пример того, как предполагается, функция работы:
Caesar_decrypt('mjqqt', 5) == 'hello'
Использование Caesar_break, приведенное утверждение будет выглядеть следующим образом:
Caesar_break('mjqqt') == 'hello'
(оба равны to 'hello')
Другими словами, мне нужен Caesar_break для декодирования сообщения БЕЗ 5.
простите меня, если я просто быть очень глупо сейчас, но я никогда не видел явные объявления типа параметра/возврата в питона ... –
, кроме того, у вас есть проблемы отступов внутри из 'Caesar_break'. Я предполагаю, что 'for x in range (26):' неверно отступом? Кроме того, вы понимаете, что 'wordlist.txt' является массивным файлом, поэтому цикл' for i in dictionary', скорее всего, будет работать в течение длительного времени .... –
Да, я случайно добавил четыре пробела при вставке кода в stackoverflow, Благодарю. Что касается файла списка слов, есть ли способ, чтобы код работал без циклов в течение этого времени? –