密碼學作業,做的時候發現網上和書上講的都不是很詳細,導致花了很多時間,所以這裡記下來一點希望能有幫助。
維吉尼亞密碼破解步驟:
確定金鑰長度
在密文中找到重複出現三次以上(這樣做是為了保證精確度和減少計算量)的字母組合。這裡,字母組合的意思是兩個及以上的重複字母組比如tn、pm。
然後列表寫出每乙個重複字母組的位置。(字母組的位置以字母組的第乙個字母為準,就是列出每個字母組的第乙個字母是整個密文裡面的第幾位)比如書上的例子bzgtnp,這裡面tn的位置是4。
接著計算相對距離。就是在第二步裡面算出的重複字母組的位置兩兩相鄰的差。比如字母組的位置是4,19,410,那麼這一步得出的結果就是15,406。
給出相對的距離的因子數。還是這個tn的例子,105 = 3 x 5 x 7,406 = 2 x 7 x 29,那麼這一步得出來的結果就應該是2,3,5,7,29
將上面的步驟運用於所有重複三次以上的字母組合,生成一張**。(以上步驟是根據kasiski測試法猜測出的可能)
根據重合因子測試法確定金鑰長度。(這一步裡面,書上的做法是每乙個自然數都做了重合指數計算,我覺得這樣似乎就讓上面求的因子數沒有什麼意義了,不過還是都求出來保準一點兒吧)。
關於重合因子測試法。
這裡面要用的兩個混的量,乙個是重合指數,乙個是重合指數的無偏估計值。
重合指數:設某種語言由n個字母組成,每個字母i發生的概率為
對於隨機文字,這一值大約是0.038。而對於英文文字,這一值大約是0.065。(因為在英語語言中,各個字母出現的頻率是有分布的)。
重合指數的無偏估計值:
其中l表示密文長度,
這兩個有什麼區別呢,簡單來說就是如果判斷文字是否被單表加密的時候,要用重合指數來計算。如果密文的重合指數較低,就可能是乙個多表代換密碼。(這裡的理解是,如果是單錶加密相當於凱撒密碼,每個字母出現的次數看作乙個陣列的話,加密前後只是陣列的下標發生了變化,下標和次數的對應關係順序變化,而整個陣列的內容沒有變化。計算重合指數的時候,又和下標無關,只和整個陣列裡面數字的出現次數有關。)
而在破解維吉尼亞密碼的時候,因為密文長度有限容易出現偏差,所以這時候用無偏估計值來計算。
我們從1開始計算金鑰長度對應的分組對應的重合指數的無偏估計值。
金鑰長度為1的時候,整個密文是乙個組內,所以無偏估計值是整個文章的無偏估計值。
金鑰長度為2的時候,將第1,3,5,7....分為一組,將2,4,6,8....分為一組,然後對兩組分別求無偏估計值並求平均值。
金鑰長度為3的時候,將第1,4,7,10...分為一組,第2,5,8,11...分為一組,第3,6,9,12....分為一組。然後對三組分別求無偏估計值病區平均值。
當求到乙個重合指數的無偏估計值最接近0.065的金鑰長度的時候,可以認為這個長度就是金鑰的長度。
確定金鑰內容
在這一步中,我們要用到另外乙個指數,擬重合指數。
設某種語言由n個字母組成,每個字母i在第乙個分布中發生的概率為
而在破解維吉尼亞密碼的過程中,第乙個分布即為正常英語文字,第二個分布為我們分組下的維吉尼亞密碼密文的文字。
根據我們在上一步求的金鑰,把維吉尼亞密碼分成m個組(m為金鑰長度)。這樣在每個組內的密文都是由同乙個字母(金鑰)加密而來的,就相當於凱撒密碼。所以我們從a-z測試這個作為金鑰的字母到底是什麼。當擬重合指數取最大的時候,可以認定這個就是使用的金鑰。
根據金鑰就可以輕而易舉得到明文啦(*^▽^*)
維吉尼亞密碼
維吉尼亞密碼是在凱撒密碼基礎上產生的一種加密方法,它將凱撒密碼的全部25種位移排序為一張表,與原字母序列共同組成26行及26列的字母表。另外,維吉尼亞密碼必須有乙個金鑰,這個金鑰由字母組成,最少乙個,最多可與明文本母數量相等。維吉尼亞密碼加密方法示例如下 明文 i ve got it.金鑰 ok 密...
古典密碼之維吉尼亞密碼
include include intmain int i,h,x,count 0,m,m1,t int l,l2,lk,lk2,l3,l4 int p 0,j 0,n 0,p2 0,n1 0,j1 0,c 0,count1 0,count2 0 int r printf n printf 維吉尼亞...
古典密碼 維吉尼亞密碼實驗
維吉尼亞密碼是古典密碼中非常具有代表的例子。本實驗要求用高階語言編寫和除錯乙個簡單的維吉尼亞密碼實現及解密程式,通過本實驗可以加深理解維吉尼亞密碼原理。維吉尼亞密碼由凱撒密碼擴充套件而來,引入了金鑰的概念。即根據金鑰來決定用哪一行的密表來進行替換,以此來對抗字頻統計。維吉尼亞密碼的程式設計實現 1 ...