2016-02-22 64 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. 您想要的解密是得分最高的輸出。