古老而又神奇的密码
2020-06-30陈新龙
陈新龙
在战争中,将领为了预防情报在传递过程中被敌军截获,往往都对情报做了一些手脚,也就是我们俗称的“加密”。在密码学中,恺撒密码(Caesar cipher)是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以羅马恺撒大帝的名字命名的,当年恺撒曾用此方法与他的将军们进行联系。
恺撒密码的替换方法是通过排列明文和密文字母表,如果仔细观察,我们能很轻易地找出其中的规律,密文字母表示将明文字母表向左或向右移动一个固定数目的位置。例如,当偏移量是左移3的时候,解密时的密钥就是3,当然我们也可以设置偏移量:
明文字母表:ABCDEFGHIJKLMNOPQRSTUVWX
YZ;
密文字母表:DEFGHIJKLMNOPQRSTUVWXYZA
BC。
接下来分析一道恺撒密码编程题:
在Text1中输入明文:ABCDEFGHIJKLMNOPQRS
TUVWXYZ,根据恺撒密码的原理当点击加密后,密文为:EFGHIJKLMNOPQRSTUVWXYZABC。当我们输入其他非字母字符时,密文还是和明文是一样的,聪明的你是否已经想出答案了?
首先我们先自行分析思维导图,看看你的思路和我的思路有什么异同。
解析:首先把明文中的每个字符给提取出来,接着对提取出来的每个字符进行单独的字符判断,判断每个字符的范围,这里根据密码变化情况分为三个范围,根据不同的范围做出相应的变化。比如A到W字母之间,我们可以把字母向后移动三位,X到Z字母之间,我们可以把字母向前移动23位,而剩下的其他非字母类的字符则不变化,最后组合起来,就变成了新的密文。
在编程中,我们就可以用这种关系来编写我们的代码,我们选用Visual Basic程序来编写,这样程序界面和系统常见的对话框一致。
难度其实不大,关键是理解字符分类的思维。
难度解析:恺撒密码这道题目的主要难度,在于我们的提取函数MID(X,Y,Z),提取函数的意义就是在于由X的第n个字符读起,读取后面的m个字符,这里我们还用到了Chr和Asc两个函数,Chr是将数字转换成字母,而Asc是将字母转换成数字,注意两个函数的使用差异。