我正在试图找出一个任务,要求我们编写一个程序来暴力破解加密的凯撒密码消息。我可以这样做,我的程序打印所有可能的解密消息,但我仍然坚持下一部分陈述:
对于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")
打印
我希望这不会花很长时间,因为我还有其他事情要做
答案 0 :(得分:0)
方法可能如下: