在Python中强制使用Caesar密码

在Python中强制使用Caesar密码,python,encryption,caesar-cipher,Python,Encryption,Caesar Cipher,我试图找出一个任务,它要求我们写一个程序来强制执行一个加密的凯撒密码消息。我可以这样做,直到我的程序打印出所有可能的解密消息,但我仍停留在下一部分: 对于26条可能被解密的消息中的每一条,我们的程序需要弄清楚它是否“看起来像英语”,而不是加密的胡言乱语 方法如下:我们将从可能解密的消息中提取每个单词,并在字典(英语单词列表)中查找。如果这个词在字典里,那么它就是一个英语单词;如果这封可能解密的邮件中有很多英文单词,那么这封邮件很可能是正确的解密明文。(如果字典中只有很少的单词,那么这条消息就不是

我试图找出一个任务,它要求我们写一个程序来强制执行一个加密的凯撒密码消息。我可以这样做,直到我的程序打印出所有可能的解密消息,但我仍停留在下一部分:

对于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")
印刷品

我希望这不会花太长时间,因为我还有其他事情要做


一种方法可以是:

  • 获取一本英语词典并将其导入到您的代码中
  • 将所有26个输出字符串存储在列表中
  • 对于每个输出:计算字典中存在的单词数量
  • 您想要的解密是得分最高的输出

  • 我不知道这里是否有问题。基本上,我的代码返回了一个列表,列出了所有可能的消息代码解码方式,我需要它能够区分哪些解码的消息是正确的,并且只返回>如果您遇到特定问题,我们将尽力提供帮助,但是,仅仅说你的代码做得不够就意味着你要求我们为你编写代码。我只是要求我们朝着正确的方向推进,而不是整个代码。你可以将输出与常用词词典进行比较。