人們?yōu)榱瞬蛔屝畔⑿孤叮瑫?huì)對(duì)信息進(jìn)行加密處理,將正常的、可識(shí)別的信息轉(zhuǎn)化為無法識(shí)別的信息。密碼已經(jīng)經(jīng)歷了三個(gè)階段:古典密碼、近代密碼、現(xiàn)代密碼。在大學(xué)的課程中就專門有一門密碼學(xué)。
今天介紹的這種加密技術(shù)叫棋盤密碼(Polybius方表),這種密碼據(jù)說出現(xiàn)在公元2世紀(jì)由希臘人波利比烏斯發(fā)明。在5×5的方格中放入26個(gè)字母,由于字母數(shù)量超出方格格數(shù),所以將字母I和J存放在同一個(gè)格子中(表1)。
加密和解密:兩個(gè)數(shù)字一組,每組數(shù)字的第一個(gè)數(shù)字對(duì)應(yīng)行坐標(biāo),第二個(gè)數(shù)字對(duì)應(yīng)列坐標(biāo)。例如明文是:fly with me,加密的結(jié)果是21 31 54 52 24 44 23 32 15一串?dāng)?shù)字。這種棋盤密碼只能對(duì)26個(gè)英文字母進(jìn)行加密且不區(qū)分大小寫,如果想對(duì)一些符號(hào)或者數(shù)字加密的話,就需要更大的棋盤。棋盤密碼在當(dāng)時(shí)絕對(duì)算得上一個(gè)偉大的發(fā)明,看似簡(jiǎn)單卻是后世無數(shù)種密碼的雛形,比如19世紀(jì)由英國(guó)科學(xué)家查爾斯發(fā)明的“普萊菲斯密碼”。那么我們?nèi)绾卫肧cratch編程來完成用棋盤密碼對(duì)明文的加密呢?
由于棋盤密碼的變化過程是固定的,所以用列表“原文字符清單”來存放原文字符(字母A-Z),用列表“棋盤位置清單”存儲(chǔ)這個(gè)字母加密后的數(shù)字組,保證兩個(gè)列表中的內(nèi)容一一對(duì)應(yīng),如a=11,b=12,注意i=24且j=24(圖1)。
為了記錄兩個(gè)文本:未加密前的明文文本和加密后的密文文本,接下來要?jiǎng)?chuàng)建幾個(gè)變量:“原文”“密文”和“位置”(記錄每個(gè)字符所在原文列表中的編號(hào))。設(shè)定一個(gè)“計(jì)數(shù)器”,用于循環(huán)判斷原文中每個(gè)字符的變化(圖2)。
將原文設(shè)置成用戶輸入的文本,并重復(fù)執(zhí)行直到計(jì)數(shù)器超出原文的字符數(shù),在循環(huán)的過程中判斷輸入的每個(gè)字符是否原文列表中的內(nèi)容,即判斷是否為英文字母,如果在“原文字符清單”列表中,那么記錄下它的編號(hào),到“棋盤位置清單”列表中尋找對(duì)應(yīng)項(xiàng)進(jìn)行加密,否則的話不發(fā)生變化輸出原本的字符。代碼編完后我們輸入明文測(cè)試,看看得到的密文,是否和預(yù)想的結(jié)果一致。
棋盤密碼和之前講過的愷撒密碼都是屬于古典密碼,只需要用到列表或字符串的,基本操作便可以完成了,以后我們會(huì)找一些更復(fù)雜的密碼。