2014-12-28 125 views
-3

所以我得到了一個任務,我需要解密一個字符串,用密鑰中的某個密鑰加密。所以我的思路是找到字符串中最常見的字母,並從中找到關鍵字,因爲最常見的字母是E,當我得到關鍵字時,我將解密文本(基本上每個字母都是字母。「T空間 - 關鍵現在我面臨着一些困難:如何找到移位密碼的加密密鑰?

  1. 我希望我的計劃,爲每一個關鍵工作,所以我不知道最常見的字母后或E之前(在ASCII圖表)因此,我不能只是基板E,並得到答案,我不知道什麼數學的東西,我需要做的,使其工作。

  2. 此外,當我找到鑰匙,我不知道如何使例如A回去t ØY,喜歡做的圓(但我想我也許知道我是怎麼想的與%運營商)

反正任何人,可以幫助非常感謝,我不允許真正的高級命令。字符串中的所有字母都是大寫字母,密碼是簡單的移位密碼。

+0

我們在這裏談論什麼樣的密碼?簡單的移位密碼或更復雜的東西? – DinoOcch

+0

簡單的密碼,你轉移信件的前進 –

+0

我可以添加我已經做了,但我覺得它不會改變 –

回答

0

爲了簡單起見,我假設您正在嘗試解密凱撒(或移位)密碼。儘管涉及的原則也適用於其他密碼。

你表示你想找到最常見的字符。這並不能真正幫助你,因爲這封信可以成爲其他任何信件。然而,你可以用這個做一個字母頻率攻擊...然而這隻對非常長的字符串非常有效......

解決這個問題的最簡單方法可能是強制解決方案。由於只有極少數解決方案,因此強力可能非常有效。字母表中有26個字母,所以我們可以移動0-25。這意味着只有25個可能的字符串需要檢查。

找到這些字符串是相對平凡的。在1-25範圍內使用循環。現在,只需將字符串中的每個字符轉換爲數字0-25 [A = 0,B = 1 ... Z = 25]並添加移位[1-25]。 (char_value + shift) % 26會給你新的角色價值。 (您也可以使用ASCII字符值,但我爲了理解而使用這些值。

然而,不太重要的是確定哪個字符串是最有可能的在我看來,最好的方法是這是使用一個普通單詞的字典 - 你可以在這裏閱讀更多關於這種類型的攻擊:http://en.wikipedia.org/wiki/Known-plaintext_attack。用你的字典,你只需要查找已知單詞數量最多的字符串 - 雖然它可以比這更復雜。機會是,這將是您的解決方案。

這將爲所有情況。


如果您只有想要查看哪些最常見的字母被轉換爲E的問題,問題就變得非常簡單。但是,在實際的例子中,字符串中最常見的字母不一定是E,所以這種策略並不是最優的。

通過循環字符串找出最常見的字母,保持每個字母出現的運行計數。你可以用很多方法來做到這一點。你可以使用整數列表,地圖,或幾乎任何東西......

從這裏,確定從這封信到E轉變的大小。例如,如果S是最常見的,則移位爲12. E的值爲4.S的值爲18.移位是(26-18)+4。可以使用餘數函數將其轉換爲所有可能的字母,例如((26-o)+4) % 26,其中o是最常用字母的值。所以如果最頻繁的字母是A = 0,26 + 4%25 = 4,這是正確的轉變。

現在,您可以如上所述移動所有字符。

+0

在我們的工作中,我們知道單詞E是英語字母表中最常見的字母,所以我查了一下最常見的字母是什麼我的字符串,最終是S所以我認爲E被轉移到S,現在我想爲每個字符串做這個找到最常見的字母,你可以知道密鑰並解密字符串 –

+0

好吧,我得到了一切,那我正在尋找的公式,你能解釋我爲什麼以這種方式計算Shift嗎?就像我得到它的權利,但不知道如何得到它。編輯:好吧,我現在得到它,你S篩選前進到E所以每封信都會去她的地方,我試圖計算從E到S的轉變,而不是從S到E –