陳新龍
在戰(zhàn)爭(zhēng)中,將領(lǐng)為了預(yù)防情報(bào)在傳遞過(guò)程中被敵軍截獲,往往都對(duì)情報(bào)做了一些手腳,也就是我們俗稱的“加密”。在密碼學(xué)中,愷撒密碼(Caesar cipher)是一種最簡(jiǎn)單且最廣為人知的加密技術(shù)。它是一種替換加密的技術(shù),明文中的所有字母都在字母表上向后(或向前)按照一個(gè)固定數(shù)目進(jìn)行偏移后被替換成密文。例如,當(dāng)偏移量是3的時(shí)候,所有的字母A將被替換成D,B變成E,以此類(lèi)推。這個(gè)加密方法是以羅馬愷撒大帝的名字命名的,當(dāng)年愷撒曾用此方法與他的將軍們進(jìn)行聯(lián)系。
愷撒密碼的替換方法是通過(guò)排列明文和密文字母表,如果仔細(xì)觀察,我們能很輕易地找出其中的規(guī)律,密文字母表示將明文字母表向左或向右移動(dòng)一個(gè)固定數(shù)目的位置。例如,當(dāng)偏移量是左移3的時(shí)候,解密時(shí)的密鑰就是3,當(dāng)然我們也可以設(shè)置偏移量:
明文字母表:ABCDEFGHIJKLMNOPQRSTUVWX
YZ;
密文字母表:DEFGHIJKLMNOPQRSTUVWXYZA
BC。
接下來(lái)分析一道愷撒密碼編程題:
在Text1中輸入明文:ABCDEFGHIJKLMNOPQRS
TUVWXYZ,根據(jù)愷撒密碼的原理當(dāng)點(diǎn)擊加密后,密文為:EFGHIJKLMNOPQRSTUVWXYZABC。當(dāng)我們輸入其他非字母字符時(shí),密文還是和明文是一樣的,聰明的你是否已經(jīng)想出答案了?
首先我們先自行分析思維導(dǎo)圖,看看你的思路和我的思路有什么異同。
解析:首先把明文中的每個(gè)字符給提取出來(lái),接著對(duì)提取出來(lái)的每個(gè)字符進(jìn)行單獨(dú)的字符判斷,判斷每個(gè)字符的范圍,這里根據(jù)密碼變化情況分為三個(gè)范圍,根據(jù)不同的范圍做出相應(yīng)的變化。比如A到W字母之間,我們可以把字母向后移動(dòng)三位,X到Z字母之間,我們可以把字母向前移動(dòng)23位,而剩下的其他非字母類(lèi)的字符則不變化,最后組合起來(lái),就變成了新的密文。
在編程中,我們就可以用這種關(guān)系來(lái)編寫(xiě)我們的代碼,我們選用Visual Basic程序來(lái)編寫(xiě),這樣程序界面和系統(tǒng)常見(jiàn)的對(duì)話框一致。
難度其實(shí)不大,關(guān)鍵是理解字符分類(lèi)的思維。
難度解析:愷撒密碼這道題目的主要難度,在于我們的提取函數(shù)MID(X,Y,Z),提取函數(shù)的意義就是在于由X的第n個(gè)字符讀起,讀取后面的m個(gè)字符,這里我們還用到了Chr和Asc兩個(gè)函數(shù),Chr是將數(shù)字轉(zhuǎn)換成字母,而Asc是將字母轉(zhuǎn)換成數(shù)字,注意兩個(gè)函數(shù)的使用差異。