破解Vigenere加密法

前一陣子參加了Coursera的課程關愛生命--實用急救與自救技能。很很差意思地說,這是我完成的第一門MOOC課程。我順利地完成了課程。截至目前,該門課程的成績還沒出,可是我按照所公佈的成績算法,我應該會得到94.6分。這仍是我漏交了第一週做業以後的成績。git

完成這門課的信心讓我決定參加一個專項課程:Cybersecurity。幸運地發現Cryptography課正在進行,而且次日就要中止接受Signature Track了,果斷交錢報了名。github

而後就開始了苦逼的趕進度之路。利用各類碎片時間來看前幾周的課,而且趕deadline。第一週的做業終於在deadline以前提交了。算法

=========================== 我是正文的分割線 ===============================編程

第一週的編程做業是一個基於XOR的Vigenere加密法的破解。因爲破解程序並不基於某種語言,因此我用JavaScript實現了一下,而且決定若是之後的做業儘可能也用JavaScript實現。個人答案在這裏加密

這類移位加密算法是很是好破解的。首先,若是密鑰長度爲1的話,若是密鑰取值在ASCII上,可能性就只有256種。增長密鑰長度只會線性增長破解難度,由於每隔密鑰長度個位置把明文抽出,這些明文其實是同一個密鑰位加密的——這又退化到了密鑰長度爲1的狀況。而後再加上大多數明文落在ASCII的32~128這個區間上,而且字母比較多,再加上天然英語的字母出現機率分佈,就可以把明文猜到七七八八了。對於這題而言,還有其餘一些線索,好比我會猜首字母是大寫,最後一位會是一個標點符號,每幾位就會出現空格,並且名文中大概會出現Cryptography和Coursera之類的單詞(雖然破解的時候並無用到這些線索)。ip

此次做業吸引個人地方在於,我還真是第一次着手寫代碼來破解這個加密算法。破解古典密碼的原理其實我老早就知道了,如同上段所說的,「這裏有漏洞,這裏有破綻,這裏比較弱,因此能夠很容易地……」,但真的寫起代碼來,纔會對這些結論有更貼切的認識。「破解一個加密算法,我真的行嗎?」即便在清楚一切細節的狀況下,我也不大會作這種嘗試,除非是「啊啊啊啊啊後天就要交做業了怎麼辦怎麼辦」做爲壓力。寫代碼的時候我感到又回到了大學時候趕死線的狀況。寫完全部代碼,明文在一瞬間出如今眼前的時候,我好像又回到了電腦上第一次出現Hello World的激動中。ci

我很喜歡這門課,但願可以堅持上完整個專項課程。get

若是你對這個破解算法有興趣的話,連接中的代碼就是我所想要說的所有it

相關文章
相關標籤/搜索