Permutation
如何在沒有密鑰的情況下解決列轉置密碼
我收到了一條 77 字元的解密消息,但無論我在哪裡查看所有列式轉置腳本,都需要密鑰。我相信列數為 7,但我正在尋找一個輸出這 7 列的所有排列的程式碼,以便我可以使用字典攻擊來查找其中包含可讀單詞的消息並將輸出數量減少到瀏覽。
我之前寫了一個相關問題的答案,展示瞭如何手動破解柱狀轉置密碼的範例。基本步驟有兩個:
- 測試不同的密鑰長度,並尋找每列中的字母看起來可能是連續的長度。
- 一旦你選擇了一個密鑰長度,將列隨機排列,直到它們開始排列成有意義的文本片段。
在連結的例子中,通過知道明文中出現的一個獨特的單詞,這些步驟變得更容易,特別是密文包含一個 Q 和一個 U,這幾乎可以保證在英文文本中是連續的,但是即使沒有這些線索,也可以使用相同的通用方法。
可能可以使用隨機優化算法(如隨機爬山)自動化此過程:基本上,為列選擇隨機初始排序,計算生成的明文與英語的相似程度(使用 $ n $ -gram 頻率統計),然後反复嘗試移動一個或移動連續的列,看看這是否使明文看起來更像英語。如果是,請進行更改並繼續嘗試進一步改進;如果不是,請拒絕更改並重複。
對於 7 列,只需嘗試所有 7 列!= 5040 可能的列順序對於電腦也是可行的,儘管隨著列數的增加,這個數字會迅速增長。如前所述,生成所有可能的列排列是一個標準計算問題,存在幾種眾所周知的算法。
破解轉置密碼的常用方法是研究以不同方式組合列或字謎的二元圖的頻率,並將其與您的語言的典型頻率進行比較。
http://norvig.com/mayzner.html
以下文件顯示瞭如何應用該方法並通過生成機率矩陣來自動化它……
http://homepages.math.uic.edu/~leon/mcs425-s08/handouts/breaking_tranposition_cipher.pdf
如果您還添加三元組,您將改善結果。