使用Python破解維吉尼亞密碼
維吉尼亞密碼是一種經典的多表密碼系統,原理是通過一系列的凱撒密碼加密增加其破解難度。維吉尼亞使用起來非常簡單,只需要指定一串移位序列即可。但破解起來卻非常困難,被稱為“不可破解的密碼”。
加解密原理
選擇一串密鑰,這個密鑰可以是數字也可以是字母。一般來說使用字母,因為這樣密鑰便于記憶。原文和密鑰都可以被表示為數字的形式,具體規則是這個字母在字母表中的次序,比如A是序號是2,B的序號是3,以此類推。加密的原理就是將原文的值對應的用密鑰進行凱撒密碼加密。
舉個例子:
密鑰是WOLF
明文:THIS WORLD DOESNT NEED A HERO IT NEEDS A PROFESSIONAL
密鑰:WOLF WOLFW OLFWOL FWOL F WOLF WO LFWOL F WOLFWOLFWOLF
密文:QWFY CUXRJ JUKYTZ TKKJ G NKXU OZ TKKJY G VXULKYYOUTGR
比如第一個字符是T,序號20,第一個字符對應的密鑰是W,序號23,那么密文就應該是序號(20+23)mod26的字母,即Q。解密時只需要按照同樣的順序減回來即可。這種加密方式本質上是一系列的凱撒密碼的組合,但是卻讓暴力破解幾乎不可能。首先密鑰的長度是不確定的,其次對于每一種密鑰長度n,都有26^n種可能性。如果密鑰長度超過10,就已經超過100萬億種可能性了。這樣的加密方式毫無疑問是暴力破解的噩夢,即便機器的性能足夠,也還有判斷猜解結果是否正確的問題。
破解方法
毫無疑問,這是個強壯又好用的加密系統,但這并不意味著它是不可破解的。但是通常來說,我們只能破解比較長的,有意義的文本加密后的密文。這是因為我們需要使用一些關于英文文本一些統計數據。
對于破解,我們首先要解決兩個問題:密鑰長度,具體的密鑰。
我們要首先猜解出正確的密鑰長度,不然長度不對,再努力都是白費。
這一步我們通過計算每種密鑰長度的重合指數(CI)來判斷這樣劃分后的文本與常規英文文本的接近程度。
選擇重合指數最高的作為密鑰長度,進行下一步猜解。一旦有了正確的密鑰長度,可以說就已經成功了一半了。接下來是利用每個字母在英文中出現的頻次,做字頻分析去猜解實際的密鑰。正常的英文文章的匹配詞頻的IC一般在0.065左右,理論上最接近0.065的密鑰就最可能是正確密鑰。
使用這個技巧,我們對于密鑰長度內的每一列都循環計算26種移位的IC值,然后選擇最接近0.065的。最終這一串最接近0.065的移位序列就是我們猜解的密鑰。
下面附一個實戰案例:
首先猜解秘鑰長度,12和24的CI最高,24又是12的倍數關系,這代表這兩個值非常有可能是秘鑰長度。
假設長度為12,猜解key
破解成功!
最后,如果大家有編程相關需求歡迎通過微信公眾號聯系我們。
微信公眾號:320科技工作室。
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















