在Python中强制使用Caesar密码

时间:2016-02-22 00:31:00

标签: python encryption caesar-cipher

我正在试图找出一个任务,要求我们编写一个程序来暴力破解加密的凯撒密码消息。我可以这样做,我的程序打印所有可能的解密消息,但我仍然坚持下一部分陈述:

  

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

打印

  

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

1 个答案:

答案 0 :(得分:0)

方法可能如下:

  1. 获取英文字典并将其导入您的代码。
  2. 将所有26个输出字符串存储在列表中。
  3. 表示每个输出:计算字典中存在多少个单词。
  4. 您想要的解密是得分最高的输出。