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