2016-02-22 39 views
0

我想弄清楚一项任务,要求我们编写一个程序来强制加密的凯撒密码消息。我能做到这一点的地方我的程序打印出所有可能的解密消息,但我被困在下一环节点,指出:蛮子在Python中强制使用凯撒密码

对于每个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

基本上我的代码返回了所有可能的消息代码解码方式的列表,并且我需要它能够区分哪些解码消息是正确的,并且只返回该消息> –

+1

如果您来,我们将尽力帮助跨越一个特定的问题,但只是说你的代码没有足够的意味着你要求我们为你写代码。 – zondo

回答

0

方式可能是以下几点:

  1. 找一本英语词典,并将其导入到你的代码。
  2. 将所有26个输出字符串存储在列表中。
  3. 对于每个输出:计算字典中存在多少个单词。
  4. 您想要的解密是得分最高的输出。