【发布时间】:2017-05-25 20:52:39
【问题描述】:
我正在尝试找出一个任务,它要求我们编写一个程序来暴力破解加密的凯撒密码消息。我可以做到这一点,让我的程序打印所有可能的解密消息,但我被困在下一部分:
对于 26 条可能解密的消息中的每一条,我们的程序都需要确定它是否“看起来像英语”而不是加密的乱码。
方法如下:我们将获取可能已解密消息中的每个单词,并在字典(英语单词列表)中查找它。如果这个词在字典里,那么它就是一个英文词;如果这条可能解密的消息中有很多英文单词,那么这条消息很可能是正确的解密明文。 (如果消息中的单词很少在字典中,则该消息不是英文明文。)因此,我们需要计算在字典中找到的每条可能解密消息中的单词数量,保存总数以及产生它的消息。
一旦我们完成了所有 26 种可能的解密,我们应该期望字典中“命中”最多的可能解密的消息实际上是正确解密的明文,这就是我们返回的消息。
这是我目前的代码:
alphabet = 'abcdefghijklmopqrstuvwxyz'
infile = open('wordlist.txt', 'r')
def Rotate(key: int) -> str:
rotate = ""
for l in alphabet:
if l in alphabet:
rotate += alphabet[(alphabet.index(l) + key) % (len(alphabet))]
return rotate
def Caesar_break(sentence:str)-> str:
"""Takes a str encrypted by a caesar cipher and returns the original string
without using the cipher key"""
infile = open('wordlist.txt', 'r')
possible = []
for key in range(25):
Rotate(key)
table = str.maketrans(Rotate(key), alphabet)
possible.append(sentence.translate(table))
最终的结果应该是这样的
Caesar_break("I qwxm bqra lwma nwb bitm bw uwnp jmkicam I qidm wbqmz abcoo bw lw")
打印
我希望这不会花很长时间,因为我还有其他事情要做
【问题讨论】:
-
这里不知道有没有问题。
-
基本上我的代码返回了消息代码解码的所有可能方式的列表,我需要它能够区分哪些解码的消息是正确的并且只返回那个>跨度>
-
如果您遇到特定问题,我们会尽力提供帮助,但只是说您的代码做得不够意味着您要求我们为您编写代码。
-
我只是要求推动正确的方向,而不是整个代码
-
您可以将输出与常用词词典进行比较。
标签: python encryption caesar-cipher