近日聽到坊間傳聞,兒子早戀了,給小姐姐塞 「情書」 被班主任當場截獲。兒子卻不覺得然,義正詞嚴的反駁:「如今凡事都得講究證據,老師您不能污衊我!這根本不是情書呀!」 。無奈之下,老師把情書轉交給老父親我,叫我本身處理。程序員
老父親我是一位程序員,打開 「情書」 一看,好傢伙。果真是親生的(固然不是指早戀。。),寫個情書都濃濃的程序員氣息。bash
LoryhwkuhhwklqjvwkhvxqwkhprrqdqgbrxWkhvxql viruwkhgdbwkhprrqlviruwkhqljkwdqgbrxiruhyhu微信
別人可能看不懂,老父親還能不知道親生兒子的伎倆麼。憑他那點三腳貓功夫,最多來個古典加密。密文裏面重複出現的 wkh
一下就露了餡。這傢伙大概就是把明文的全部字母都按必定數目挪了一挪。好比全部字母都往右挪一位,a
變成 b
, b
變成 c
,用這種方式處理一下 I love you
,密文就是 J mpwf zpv
,天然就看不懂在說什麼了。ui
對於這種古老的加密方式,暴力破解就足夠了。就拿密文中頻繁出現的 wkh
做突破口,雖然我不知道應該往回挪動幾位,但是總共就 26 個英文字母,我試個 26 次也就出來了。加密
密文 | 移動位數 | 原文 |
---|---|---|
wkh | 1 | vhg |
wkh | 2 | uif |
wkh | 3 | the |
往回挪三位的時候,就出現了 the
,終於像個英文單詞了。可能挪動位數就是 3,對整個密文都往回挪 3 位嘗試一下:spa
IlovethreethingsthesunthemoonandyouThesuni sforthedaythemoonisforthenightandyouforevercode
加點空格和標點,cdn
I love three things:the sun ,the moon and you.three
The sun is for the day ,the moon is for the nightjsx
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 源碼解析,掃碼關注我吧!