有时候我也是不太厚道的!上中下之后竟然还有剩下的。
抛弃那些纸糊的工具直接用笔来做加密
密码轮和St.Cyr纸带的确是实现凯撒加密算法的好工具,但是聪明的我们用纸和笔一样能完成。
先在纸上写下A到Z这26个字母,并在字母后面编号,从0到25。意味着0对应A,1对应B,如此类推,那么Z就对应25(你猜对了么?).请注意,我们的编号是从0开始的,编号以25结束。看起来是这样的:
其实这个图,我们可以这么看,用数字来表示字母。
这是一个非常重要的概念,具有分水岭式的意义,因为数学是基于数字的,此后我们有了新的途径去让数学和字母融合!
现在我们选择一个字母,记录下它的数字,作为我们的秘钥。然后把这个数字和现有字母表下对应的数字相加,它们的和就是密文。举个例子,我要加密“Hello.How are you?”,加密秘钥是13.首先,我们得找到第一个字母H的编号,是7.接着加上秘钥13,好吧它们的和是多少呢?20!(wow,真聪明!7+13=20)那么字母表中20对应的字母是什么呢?没错,就是U。同样的办法,加密E,就是4+13等于17,17又对应R,所以E加密后就成了R。(我知道,你看到这里肯定头都大了,没事,请看下图)
不要以为你全明白了,你真的去做的时候,当你加密O的时候,你会发现:O的编号是14,加密后14+13等于27,问题来了,我们的编码只到25,但是我们出现了27.当出现这样的情况的时候,不要着急,只需要把他们减去26就可以了。所以O加密之后是14+13-26所以是1,对应的是B。因此,O加密后的字符是B。当我们完全加密完这个句子的时候密文是这样的:“Uryyb. Ubj ner lbh?”(“Hello. How are you?”)
我们总结一下这个步骤:
1.从1到25选择一个数字做密码,(为什么不选0呢,试一试!)
2.找到明文(就是加密对象)的字母的编号
3.编号和密码相加求和
4.如果两者之和大于等于26,那就减去26
5.找到求和的数字(或减去26之和的数字)对应的字母,这就是密文
6.重复第2步到第5部,直到所有明文都加密完
然后再看看,上面的加密过程的图,是不是秒懂?
现在我们看看如何解密,不过有一个小难点就是,你要理解这个过程里头的负数(神马,竟然有负数?莫担心,我教你)。如果你需要补习一下负数加减法的基础,欢迎点击http://invpy.com/neg
解密在这里其实是加密的逆过程,通俗一点就是,加密做的是加法,解密就是减法(加减法本质上不是一样的么?你想多了,重点考虑他们如何互为可逆吧。如果没有这个钻牛角尖的想法,恭喜你,你是正常人!)。我们看看密文B,它的数字是1,然后减去秘钥13,结果是-12,肿么办呢?我们在加密的时候对那些超过26的数用的是减法,减去26,在解密的过程中同样可以引入这个方法,结果是负数的时候加上26就好了。-12+26结果是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.
二次加密
或许有读者突发奇想,如果把加密后的密文再用同样的方法换个秘钥再加密一次,是不是加密的效果就会加倍的好呢?有想法很好,不过这不是凯撒加密的重点。不过,我们也来看看这种加密技巧吧。
举个例子,比如用秘钥3加密“KITTEN”这个单词,密文是“NLWWHQ”。接着我们用秘钥4加密“NLWWHQ”,新的密文是“RPAALU”。其实如果你尝试用秘钥7加密“KITTEN”的时候,你会发现密文也是“RPAALU”。所以其实这两次加密的结果和一次加密的结果是一样的,并不能使得加密的效果变得更好。
我们来分析一下它的原因吧,第一次我们用秘钥3的时候,相当于所有明文的编码都加了3.当我们在用这个结果用秘钥4加密的时候,相当于把密文的编码全都加了4,相当于原来的明文加了7,所以合成的加密效果其实只是相当于用了秘钥7加密了一次。
所以,请注意,对于大部分的加密算法而言,重复的对自身加密的过程并不能提高加密的强度。再说了,就这个算法而言,如果两次加密的秘钥的和等于26的时候,出来的密文其实就是明文。(这就是聪明过头的效果)
实际的加密器
凯撒加密,或者类似的加密方法,其实已经沿用了好多个世纪(很久很久很久很久以前.....)。下图呈现的是美国南北战争1863年Albert Myer发明的加密轮。
手工加密解密一段很长的文字的话,这肯定会耗上你非常长的时间。所以今时今日我们可以用计算机来做这个事情。对于计算机来说,我们手工看起来很长的文字,它不到1秒就可能完成了。不过无论如何,我得先教你们学会编程序。
因为我们必须得用计算机能理解的话,告诉计算机让它干活。显然,学习编程比学习像日语或者西班牙语这种外文简单多了。你也不需要知道比加减乘除更多的数学运算方法(比如微积分,木有!)。下一章我们开始学习Python,记得去下载一个python的安装包吧。