近日聽到坊間傳聞,兒子早戀了,給小姐姐塞 “情書” 被班主任當場截獲。兒子卻不以為然,理直氣壯的反駁:“現在凡事都得講究證據,老師您不能汙衊我!這根本不是情書呀!” 。無奈之下,老師把情書轉交給老父親我,叫我自己處理。
凱撒密碼
老父親我是一位程式設計師,開啟 “情書” 一看,好傢伙。果然是親生的(當然不是指早戀。。),寫個情書都濃濃的程式設計師氣息。
LoryhwkuhhwklqjvwkhvxqwkhprrqdqgbrxWkhvxql viruwkhgdbwkhprrqlviruwkhqljkwdqgbrxiruhyhu
別人可能看不懂,老父親還能不知道親生兒子的伎倆麼。憑他那點三腳貓功夫,最多來個古典加密。密文裡面重複出現的 wkh
一下就露了餡。這傢伙大概就是把明文的所有字母都按一定數目挪了一挪。比如所有字母都往右挪一位,a
變成 b
, b
變成 c
,用這種方式處理一下 I love you
,密文就是 J mpwf zpv
,自然就看不懂在說什麼了。
對於這種古老的加密方式,暴力破解就足夠了。就拿密文中頻繁出現的 wkh
作突破口,雖然我不知道應該往回挪動幾位,可是總共就 26 個英文字母,我試個 26 次也就出來了。
密文 | 移動位數 | 原文 |
---|---|---|
wkh | 1 | vhg |
wkh | 2 | uif |
wkh | 3 | the |
往回挪三位的時候,就出現了 the
,終於像個英文單詞了。可能挪動位數就是 3,對整個密文都往回挪 3 位嘗試一下:
IlovethreethingsthesunthemoonandyouThesuni sforthedaythemoonisforthenightandyouforever
加點空格和標點,
I love three things:the sun ,the moon and you.
The sun is for the day ,the moon is for the night
and you forever.
恩,詩不錯。。一頓男女混合雙打是少不了了。
故事說完了,來總結一下知識。上面說的加密方式其實是密碼學史上很著名的一種加密方式。這個加密方法是以羅馬共和時期愷撒的名字命名的,叫做 凱撒密碼,當年愷撒曾用此方法與其將軍們進行聯絡。其挪動字母的位數我們稱之為 金鑰空間 ,金鑰空間越大,越難通過暴力破解。而凱撒密碼的金鑰空間是有限的,很容易遭到暴力破解。
簡單替換密碼
吃一塹,長一智。兒子的第二封情書又來了。
cjqtqtxxwzqtwnfqtxlskwnfqtxcwqxzzxewfxgjsxwhwlsxqbumbgfu bzekfzxwelbukbazjewmxqtwqygbllbelwzblxjnqtxfxxrlbuektxwzq
從密文中重複出現的單詞 qtx
等來看,有點類似凱撒密碼,但是作為程式設計師的兒子,肯定不會犯同樣的錯誤了。基於凱撒密碼的弱點,金鑰空間不足,這次採取的加密方式肯定不能通過暴力破解來解密了。很容易想象到同屬古典加密的簡單替換密碼,依次將明文中的每一個字母按照替換表換成另一個字母。乍看和凱撒密碼一樣,都是逐個字母替換成其他字母。但是由於簡單替換密碼並非按一定位數直接挪動,它的替換表中的字母是是隨機對應的,仍以 26 個字母為例,a
可能對應 x
,b
可能對應 n
,總之,26 個字母亂序對應。那麼,簡單替換密碼的金鑰空間是多少呢?a
可以對應 26 個字母,b
可以對應 25 個字母,依次類推,金鑰空間總數就是 26 * 25 * 24 * 23 * ...
,大概是 4*10^26
,所以通過暴力破解是不大可能解密的。
這裡要介紹一種新的解密方式,叫 頻率分析。在簡單替換密碼中,由於替換表在一次加密中是固定的,所以明文字母和密文字母也總是一一對應的,所以根據密文字母出現的頻率,結合日常明文中字母出現的概率,總能看出一些端倪。下面先統計一下密文中字母出現的概率:
出現次數 | 密文字母 |
---|---|
1 | a、h、r、y |
2 | c、m |
3 | g、n、s |
4 | j、k、u |
6 | e、f |
8 | l、t、z |
9 | b |
11 | q |
12 | w |
16 | x |
明文字母出現的概率其實是有一定規律的,e
是英語中最常用的字母,其出現頻率為八分之一。最常用的 9 個字母 e,t,a,o,n,i,r,s 和 h 。全部英語單詞中有一半以上是以 t,a,o,s 或 w 開頭的。僅 10 個單詞(the,of,and,to,a,in,that,it,is 和 I)就構成標準英語文章四分之一以上的篇幅。所以當密文長度越長,其實就越容易漏出破綻。當然上面的例子很短,只是為了方便說明頻率分析法。
一般將密文中出現頻率最高的字母替換為 e
總是沒錯的,這裡先把 x
換成 E
。為了區分密文和明文,明文使用大寫字母表示:
cjqtqtEEwzqtwnfqtElskwnfqtEcwqEzzEewfEgjsEwhwlsEqbumbgfu bzekfzEwelbukbazjewmEqtwqygbllbelwzblEjnqtEfEErlbuektEwzq
上面的密文已將所有 x
都替換成了 E
。含有 e
的英文中最常見的單詞就是 the
了,而且上面密文中也頻繁出現了 qtE
(粗體標註), 不妨假設這就是 the
,可以得到密文 q
對應明文 t
,密文t
對應明文 h
,繼續替換密文中相應字母:
cjTHTHEEwzTHwnfTHElskwnfTHEcwTEzzEewfEgjsEwhwlsETbumbgfu bzekfzEwelbukbazjewmETHwTygbllbelwzblEjnTHEfEErlbuekHEwzT
接下來就得靠經驗(瞎蒙)了,第 5 到 第 12 個字母, THEEwzTH
後面的 EwzTH
應該是一個單詞,想想什麼單詞是 exxth
,很容易想到 earth
,可以得到密文 w
對應明文 a
,密文z
對應明文 r
,繼續替換:
cjTH THE EARTH Anf THE lskAnf THE cATERREeAfEgjsEAhAlsETbumbgfu bRekfREAelbukbaRjeAmETHATygbllbelARblEjn THE fEErlbuek HEART
cjTH THE EARTH Anf THE lskAnf
,with the ... and the ...
, 這裡的chTH
應該是 with
, Anf
應該是 and
, 用W
、I
、 D
分別替換c
、j
、 f
:
WITH THE EARTH AND THE lsk AND THE WATER REeADEgIsEAhAlsETbumbgDu bRekDREAelbukbaRIeAmETHATygbllbelARblEIN THE DEErlbuek HEART
REeADE
大概也只能是 remade
了。再次替換;
WITH THE EARTH AND THE lsk AND THE WATERREMADEgIsEAhAlsETbumbgDu bRMkDREAMlbukbaRIMAmETHATygbllbMlARblEIN THE DEErlbuMk HEART
結尾 Mk HEART
很容易想到 My heart
,用 Y
代替 k
:
WITH THE EARTH AND THE lsY AND THE WATER REMADE gIsEAhAlsET bu mbgDu bR MY DREAMl bu YbaRIMAmETHATygbllbMlARblEIN THE DEErl bu MY HEART
一時沒有頭緒了,再來看看重複字串,發現了一個 bu
,上面已標註。還是看看結尾來猜測,xx my heart
,很容易想到 of my heart
,o
在明文中也是高頻字母,這裡的 b
在密文中出現了 9 次,也是高頻字母,因此很有可能就是 of
, 替換進去看一下:
WITH THE EARTH AND THE lsY AND THE WATER REMADE gIsEAhAlsET OF mOgD FOR MY DREAMl OF YOaR IMAmE THAT ygOllOMlAROlEIN THE DEErl OF MY HEART
果然又可以認出幾個單詞,上面加粗標註的 YOaR IMAmE
應當是 your image
,繼續替換:
WITH THE EARTH AND THE lsY AND THE WATER REMADE gIsEAhAlsET OF GOgD FOR MY DREAMl OF YOUR IMAGE THAT ygOllOMlAROlE IN THE DEErl OF MY HEART
OF GOgD FOR MY DREAMl
,go什麼d
,除了金子 gold
好像也沒什麼單詞了。dream
後面加個字母,除了加複數 s 好像也沒什麼選擇。再替換這兩個字母:
WITH THE EARTH AND THE SsY AND THE WATER REMADE gIsEAhASsET OF GOLD FOR MY DREAMS OF YOUR IMAGE THAT yLOSSOMS A ROSE IN THE DEErS OF MY HEART
s什麼y
,sky
, 什麼lossoms
,很適合查字典,blossoms
。K
和 B
代替 s
和 y
:
WITH THE EARTH AND THE SKY AND THE WATER REMADE gIKE A hASKET OF GOLD FOR MY DREAMS OF YOUR IMAGE THAT BLOSSOMS A ROSE IN THE DEErS OF MY HEART
大致內容就全部出來了,手動渲染一下。
With the earth and the sky and the water,
remade, like a casket of gold.
For my dreams of your image that blossoms
a rose in the deeps of my heart.
看起來頻率分析法很麻煩,但是對於專業破譯者,其豐富的破解經驗可以快速進行破譯。從公元前開始,簡單替換密碼在幾百年前的時間裡一直被用於祕密通訊。然而在阿拉伯學者發明頻率分析法之後,這種密碼就很容易破解了。
總結
凱撒密碼是一種將明文字母按一定位數挪動形成密文的加密方法,因其金鑰空間有限,可以暴力破解。
簡單替換密碼是一種將明文字母按替換表逐位替換形成密文的加密方法,其金鑰空間極大,不可以暴力破解,但可以使用頻率分析法進行破譯。
凱撒密碼實際上也是一種簡單替換密碼。
兒子再次敗下陣來,今天是一頓女子單打,老父親用腦過度。睡前感覺於心不忍,去看看兒子,見筆記本開著,上面寫了四個大字,對稱加密 ! 睡夢中的兒子好似露出了狡黠的笑容。
預知後事如何,且聽下回分解。(以上故事純屬虛構,我兒子 3 歲。)
複製程式碼
文章首發微信公眾號:
秉心說
, 專注 Java 、 Android 原創知識分享,LeetCode 題解。更多 JDK 原始碼解析,掃碼關注我吧!