论文部分内容阅读
“码”这个字有不少含义,如它是一个计量单位,也指堆放东西,或者指某种符号。无论编码、解码,都是按某种约定的规则来堆放符号——不妨称之为“码码”。本文就来聊聊几种“码码”的游戏,讨论几个关于“码码”的问题。
● ROT-13
“frrlbhyngre”其实是ROT-13密码,密码生成的规则非常简单,就是把字母按字母表的顺序往右移13位(其实往左移也一样),移到末尾就从头开始移。而ROT-13的全称正是“rotate by 13 places”。与其说ROT-13是一种加密方法,还不如说是一种文字游戏,因为用ROT-13加密的文本实在太容易被破解了,以至于有人开玩笑说他自己正在做“关于双倍ROT-13即ROT-26解密算法”的研究课题。然而正因为简单,在课堂里就可以围绕ROT-13布置一些有趣且有意义的小任务。例如,尝试自己设计一个能实现ROT-13加密和解密的工具,如利用电子表格的函数、利用网络在线转换器、重新拆装键盘按键、用文本编辑器中的宏,甚至是用卡纸做出纯手工小加密器,等等。
图1展示了一种仅用记事本来实现ROT-13加密的“另类”方法,设字母为全角英文,字体设置为宋体,然后将字母按“abcdefghijklmnopqrstuvwxyzmlkjihgfedcbazyxwvutsrqpon”排成一行,将记事本窗口大小设置成恰巧能显示整行字符串,然后一边念字母表,一边敲打全角的空格就能将密文显示在记事本的首列。(图1中首列“frrlbh”正是“seeyou”的ROT-13密码)
文本编辑器(如Microsoft Word)里的宏可以让整个加密过程变得更加自动化,且实施过程中根本不需要编写任何代码。图2中所示的例子,是通过录制宏,将大写字母在字母表中出现的位置用“@”符号来进行替换,这样也能把加密后的密文自动顶到每一行的首列。若是想让生成的密文更难被破解,就要想其他办法,如可以重新调整一下页面的页宽,或者将“@”符号再用其他字符串替换掉。如果只是录制宏简单地将“A”替换成“N”、“B”替换成“O”、“C”替换成“P”……那么用字母频率分析软件就可以很轻松地将密文破解出来。(在Microsoft Word中录制一个宏,将字母“A”用一个“@”替换,字母“B”用两个“@”替换,以此类推)
● ROT-n和钥匙
用ROT-13生成的密码太弱,但若每个字母位移的次数不同,那生成的密码就会强很多,于是ROT-13就成了ROT-n。关键问题是这个n是怎样定下来的,需要密码发送和接收双方事先约定好。假设双方都用圆周率的小数部分,即14159265358,那么加密时,第一个字母就移1位,第二个字母移4位,以此类推。“14159265358”的作用很像是一把钥匙。不过存在一点小问题:如果用一串十进制的数字当成移动次数,那么移动的范围也就在0~9之间。要解决这个问题可以将十进制数字转换成二十六进制。至于转换工具,可以使用谷歌搜索引擎,搜索“base-26 number converter”关键字,就可找到好几个在线的转换工具。
但这种加密方法仍有漏洞,如果密码的发送方和接收方总是用“14159265358”当作ROT-n的移动次数,那么每经过十一次移动操作后,就只能按原有的模式再来做移动操作,有经验的密码破解者可以利用这个漏洞来猜解密码。大家不妨先讨论一下,有没有什么可能的解决方法。(答案在本期找)
● ROT-13
“frrlbhyngre”其实是ROT-13密码,密码生成的规则非常简单,就是把字母按字母表的顺序往右移13位(其实往左移也一样),移到末尾就从头开始移。而ROT-13的全称正是“rotate by 13 places”。与其说ROT-13是一种加密方法,还不如说是一种文字游戏,因为用ROT-13加密的文本实在太容易被破解了,以至于有人开玩笑说他自己正在做“关于双倍ROT-13即ROT-26解密算法”的研究课题。然而正因为简单,在课堂里就可以围绕ROT-13布置一些有趣且有意义的小任务。例如,尝试自己设计一个能实现ROT-13加密和解密的工具,如利用电子表格的函数、利用网络在线转换器、重新拆装键盘按键、用文本编辑器中的宏,甚至是用卡纸做出纯手工小加密器,等等。
图1展示了一种仅用记事本来实现ROT-13加密的“另类”方法,设字母为全角英文,字体设置为宋体,然后将字母按“abcdefghijklmnopqrstuvwxyzmlkjihgfedcbazyxwvutsrqpon”排成一行,将记事本窗口大小设置成恰巧能显示整行字符串,然后一边念字母表,一边敲打全角的空格就能将密文显示在记事本的首列。(图1中首列“frrlbh”正是“seeyou”的ROT-13密码)
文本编辑器(如Microsoft Word)里的宏可以让整个加密过程变得更加自动化,且实施过程中根本不需要编写任何代码。图2中所示的例子,是通过录制宏,将大写字母在字母表中出现的位置用“@”符号来进行替换,这样也能把加密后的密文自动顶到每一行的首列。若是想让生成的密文更难被破解,就要想其他办法,如可以重新调整一下页面的页宽,或者将“@”符号再用其他字符串替换掉。如果只是录制宏简单地将“A”替换成“N”、“B”替换成“O”、“C”替换成“P”……那么用字母频率分析软件就可以很轻松地将密文破解出来。(在Microsoft Word中录制一个宏,将字母“A”用一个“@”替换,字母“B”用两个“@”替换,以此类推)
● ROT-n和钥匙
用ROT-13生成的密码太弱,但若每个字母位移的次数不同,那生成的密码就会强很多,于是ROT-13就成了ROT-n。关键问题是这个n是怎样定下来的,需要密码发送和接收双方事先约定好。假设双方都用圆周率的小数部分,即14159265358,那么加密时,第一个字母就移1位,第二个字母移4位,以此类推。“14159265358”的作用很像是一把钥匙。不过存在一点小问题:如果用一串十进制的数字当成移动次数,那么移动的范围也就在0~9之间。要解决这个问题可以将十进制数字转换成二十六进制。至于转换工具,可以使用谷歌搜索引擎,搜索“base-26 number converter”关键字,就可找到好几个在线的转换工具。
但这种加密方法仍有漏洞,如果密码的发送方和接收方总是用“14159265358”当作ROT-n的移动次数,那么每经过十一次移动操作后,就只能按原有的模式再来做移动操作,有经验的密码破解者可以利用这个漏洞来猜解密码。大家不妨先讨论一下,有没有什么可能的解决方法。(答案在本期找)