有時候我也是不太厚道的!上中下之后竟然還有剩下的。
拋棄那些紙糊的工具直接用筆來做加密
密碼輪和St.Cyr紙帶的確是實現(xiàn)凱撒加密算法的好工具,但是聰明的我們用紙和筆一樣能完成。
先在紙上寫下A到Z這26個字母,并在字母后面編號,從0到25。意味著0對應A,1對應B,如此類推,那么Z就對應25(你猜對了么?).請注意,我們的編號是從0開始的,編號以25結(jié)束??雌饋硎沁@樣的:

其實這個圖,我們可以這么看,用數(shù)字來表示字母。
這是一個非常重要的概念,具有分水嶺式的意義,因為數(shù)學是基于數(shù)字的,此后我們有了新的途徑去讓數(shù)學和字母融合!
現(xiàn)在我們選擇一個字母,記錄下它的數(shù)字,作為我們的秘鑰。然后把這個數(shù)字和現(xiàn)有字母表下對應的數(shù)字相加,它們的和就是密文。舉個例子,我要加密“Hello.How are you?”,加密秘鑰是13.首先,我們得找到第一個字母H的編號,是7.接著加上秘鑰13,好吧它們的和是多少呢?20?。╳ow,真聰明!7+13=20)那么字母表中20對應的字母是什么呢?沒錯,就是U。同樣的辦法,加密E,就是4+13等于17,17又對應R,所以E加密后就成了R。(我知道,你看到這里肯定頭都大了,沒事,請看下圖)

不要以為你全明白了,你真的去做的時候,當你加密O的時候,你會發(fā)現(xiàn):O的編號是14,加密后14+13等于27,問題來了,我們的編碼只到25,但是我們出現(xiàn)了27.當出現(xiàn)這樣的情況的時候,不要著急,只需要把他們減去26就可以了。所以O(shè)加密之后是14+13-26所以是1,對應的是B。因此,O加密后的字符是B。當我們完全加密完這個句子的時候密文是這樣的:“Uryyb. Ubj ner lbh?”(“Hello. How are you?”)
我們總結(jié)一下這個步驟:
1.從1到25選擇一個數(shù)字做密碼,(為什么不選0呢,試一試?。?/p>
2.找到明文(就是加密對象)的字母的編號
3.編號和密碼相加求和
4.如果兩者之和大于等于26,那就減去26
5.找到求和的數(shù)字(或減去26之和的數(shù)字)對應的字母,這就是密文
6.重復第2步到第5部,直到所有明文都加密完
然后再看看,上面的加密過程的圖,是不是秒懂?
現(xiàn)在我們看看如何解密,不過有一個小難點就是,你要理解這個過程里頭的負數(shù)(神馬,竟然有負數(shù)?莫擔心,我教你)。如果你需要補習一下負數(shù)加減法的基礎(chǔ),歡迎點擊http://invpy.com/neg
解密在這里其實是加密的逆過程,通俗一點就是,加密做的是加法,解密就是減法(加減法本質(zhì)上不是一樣的么?你想多了,重點考慮他們?nèi)绾位榭赡姘?。如果沒有這個鉆牛角尖的想法,恭喜你,你是正常人!)。我們看看密文B,它的數(shù)字是1,然后減去秘鑰13,結(jié)果是-12,腫么辦呢?我們在加密的時候?qū)δ切┏^26的數(shù)用的是減法,減去26,在解密的過程中同樣可以引入這個方法,結(jié)果是負數(shù)的時候加上26就好了。-12+26結(jié)果是14,所以密文B對于的是明文O。你看懂了么?

看,其實沒有加密輪什么的耶一樣可以做凱撒加密。如果你的記憶足夠強大,比我強的話,你根本不需要把字母的編號寫下來,直接在腦子里頭就可以完成加密解密的運算。
又到了練習題的時間了。
用凱撒加密的方法(上面學到的),加密下面的文字,別忘了文字后面說的秘鑰
1."AMBIDEXTROUS: Able to pick with equal skill a right-hand pocket or a left." 秘鑰為 4.
2."GUILLOTINE: A machine which makes a Frenchman shrug his shoulders with good reason." 秘鑰為17.
3."IMPIETY: Your irreverence toward my deity." 秘鑰為 21.
接著是解密的游戲
4."ZXAI: P RDHIJBT HDBTIXBTH LDGC QN HRDIRWBTC XC PBTGXRP PCS PBTGXRPCH XC HRDIAPCS." 秘鑰是 15.
5."MQTSWXSV: E VMZEP EWTMVERX XS TYFPMG LSRSVW." 秘鑰是4.
用秘鑰0來加密一下下面的句子:
6."This is a silly example."
下面的詞是被加密過的,嘗試找出他們使用的秘鑰的是多少?
7.ROSEBUD – LIMYVOX
8.YAMAMOTO – PRDRDFKF
9.ASTRONOMY – HZAYVUVTF
下面的句子是用秘鑰8加密的,嘗試一下用秘鑰9解密看看是什么樣子?
10."UMMSVMAA: Cvkwuuwv xibqmvkm qv xtivvqvo i zmdmvom bpib qa ewzbp epqtm."
這里是答案,你做對了么?
1.EQFMHIBXVSYW: Efpi xs tmgo amxl iuyep wompp e vmklx-lerh tsgoix sv e pijx.
2.XLZCCFKZEV: R drtyzev nyzty drbvj r Wivetydre jyilx yzj jyflcuvij nzky xffu ivrjfe.
3.DHKDZOT: Tjpm dmmzqzmzixz ojrvmy ht yzdot.
4.KILT: A costume sometimes worn by Scotchmen in America and Americans in Scotland.
5.IMPOSTOR: A rival aspirant to public honors.
6.This is a silly example.
7.20
8.17
9.7
10.LDDJMDRR: Tmbnllnm ozshdmbd hm okzmmhmf z qdudmfd sgzs hr vnqsg vghkd.
二次加密
或許有讀者突發(fā)奇想,如果把加密后的密文再用同樣的方法換個秘鑰再加密一次,是不是加密的效果就會加倍的好呢?有想法很好,不過這不是凱撒加密的重點。不過,我們也來看看這種加密技巧吧。
舉個例子,比如用秘鑰3加密“KITTEN”這個單詞,密文是“NLWWHQ”。接著我們用秘鑰4加密“NLWWHQ”,新的密文是“RPAALU”。其實如果你嘗試用秘鑰7加密“KITTEN”的時候,你會發(fā)現(xiàn)密文也是“RPAALU”。所以其實這兩次加密的結(jié)果和一次加密的結(jié)果是一樣的,并不能使得加密的效果變得更好。
我們來分析一下它的原因吧,第一次我們用秘鑰3的時候,相當于所有明文的編碼都加了3.當我們在用這個結(jié)果用秘鑰4加密的時候,相當于把密文的編碼全都加了4,相當于原來的明文加了7,所以合成的加密效果其實只是相當于用了秘鑰7加密了一次。
所以,請注意,對于大部分的加密算法而言,重復的對自身加密的過程并不能提高加密的強度。再說了,就這個算法而言,如果兩次加密的秘鑰的和等于26的時候,出來的密文其實就是明文。(這就是聰明過頭的效果)
實際的加密器
凱撒加密,或者類似的加密方法,其實已經(jīng)沿用了好多個世紀(很久很久很久很久以前.....)。下圖呈現(xiàn)的是美國南北戰(zhàn)爭1863年Albert Myer發(fā)明的加密輪。

手工加密解密一段很長的文字的話,這肯定會耗上你非常長的時間。所以今時今日我們可以用計算機來做這個事情。對于計算機來說,我們手工看起來很長的文字,它不到1秒就可能完成了。不過無論如何,我得先教你們學會編程序。
因為我們必須得用計算機能理解的話,告訴計算機讓它干活。顯然,學習編程比學習像日語或者西班牙語這種外文簡單多了。你也不需要知道比加減乘除更多的數(shù)學運算方法(比如微積分,木有!)。下一章我們開始學習Python,記得去下載一個python的安裝包吧。