陳凱


“碼”這個字有不少含義,如它是一個計量單位,也指堆放東西,或者指某種符號。無論編碼、解碼,都是按某種約定的規(guī)則來堆放符號——不妨稱之為“碼碼”。本文就來聊聊幾種“碼碼”的游戲,討論幾個關(guān)于“碼碼”的問題。
● ROT-13
“frrlbhyngre”其實是ROT-13密碼,密碼生成的規(guī)則非常簡單,就是把字母按字母表的順序往右移13位(其實往左移也一樣),移到末尾就從頭開始移。而ROT-13的全稱正是“rotate by 13 places”。與其說ROT-13是一種加密方法,還不如說是一種文字游戲,因為用ROT-13加密的文本實在太容易被破解了,以至于有人開玩笑說他自己正在做“關(guān)于雙倍ROT-13即ROT-26解密算法”的研究課題。然而正因為簡單,在課堂里就可以圍繞ROT-13布置一些有趣且有意義的小任務(wù)。例如,嘗試自己設(shè)計一個能實現(xiàn)ROT-13加密和解密的工具,如利用電子表格的函數(shù)、利用網(wǎng)絡(luò)在線轉(zhuǎn)換器、重新拆裝鍵盤按鍵、用文本編輯器中的宏,甚至是用卡紙做出純手工小加密器,等等。
圖1展示了一種僅用記事本來實現(xiàn)ROT-13加密的“另類”方法,設(shè)字母為全角英文,字體設(shè)置為宋體,然后將字母按“abcdefghijklmnopqrstuvwxyzmlkjihgfedcbazyxwvutsrqpon”排成一行,將記事本窗口大小設(shè)置成恰巧能顯示整行字符串,然后一邊念字母表,一邊敲打全角的空格就能將密文顯示在記事本的首列。(圖1中首列“frrlbh”正是“seeyou”的ROT-13密碼)
文本編輯器(如Microsoft Word)里的宏可以讓整個加密過程變得更加自動化,且實施過程中根本不需要編寫任何代碼。圖2中所示的例子,是通過錄制宏,將大寫字母在字母表中出現(xiàn)的位置用“@”符號來進(jìn)行替換,這樣也能把加密后的密文自動頂?shù)矫恳恍械氖琢小H羰窍胱屔傻拿芪母y被破解,就要想其他辦法,如可以重新調(diào)整一下頁面的頁寬,或者將“@”符號再用其他字符串替換掉。如果只是錄制宏簡單地將“A”替換成“N”、“B”替換成“O”、“C”替換成“P”……那么用字母頻率分析軟件就可以很輕松地將密文破解出來。(在Microsoft Word中錄制一個宏,將字母“A”用一個“@”替換,字母“B”用兩個“@”替換,以此類推)
● ROT-n和鑰匙
用ROT-13生成的密碼太弱,但若每個字母位移的次數(shù)不同,那生成的密碼就會強(qiáng)很多,于是ROT-13就成了ROT-n。關(guān)鍵問題是這個n是怎樣定下來的,需要密碼發(fā)送和接收雙方事先約定好。假設(shè)雙方都用圓周率的小數(shù)部分,即14159265358,那么加密時,第一個字母就移1位,第二個字母移4位,以此類推。“14159265358”的作用很像是一把鑰匙。不過存在一點小問題:如果用一串十進(jìn)制的數(shù)字當(dāng)成移動次數(shù),那么移動的范圍也就在0~9之間。要解決這個問題可以將十進(jìn)制數(shù)字轉(zhuǎn)換成二十六進(jìn)制。至于轉(zhuǎn)換工具,可以使用谷歌搜索引擎,搜索“base-26 number converter”關(guān)鍵字,就可找到好幾個在線的轉(zhuǎn)換工具。
但這種加密方法仍有漏洞,如果密碼的發(fā)送方和接收方總是用“14159265358”當(dāng)作ROT-n的移動次數(shù),那么每經(jīng)過十一次移動操作后,就只能按原有的模式再來做移動操作,有經(jīng)驗的密碼破解者可以利用這個漏洞來猜解密碼。大家不妨先討論一下,有沒有什么可能的解決方法。(答案在本期找)