人們為了不讓信息泄露,會對信息進行加密處理,將正常的、可識別的信息轉化為無法識別的信息。密碼已經經歷了三個階段:古典密碼、近代密碼、現代密碼。在大學的課程中就專門有一門密碼學。
今天介紹的這種加密技術叫棋盤密碼(Polybius方表),這種密碼據說出現在公元2世紀由希臘人波利比烏斯發明。在5×5的方格中放入26個字母,由于字母數量超出方格格數,所以將字母I和J存放在同一個格子中(表1)。

加密和解密:兩個數字一組,每組數字的第一個數字對應行坐標,第二個數字對應列坐標。例如明文是:fly with me,加密的結果是21 31 54 52 24 44 23 32 15一串數字。這種棋盤密碼只能對26個英文字母進行加密且不區分大小寫,如果想對一些符號或者數字加密的話,就需要更大的棋盤。棋盤密碼在當時絕對算得上一個偉大的發明,看似簡單卻是后世無數種密碼的雛形,比如19世紀由英國科學家查爾斯發明的“普萊菲斯密碼”。那么我們如何利用Scratch編程來完成用棋盤密碼對明文的加密呢?
由于棋盤密碼的變化過程是固定的,所以用列表“原文字符清單”來存放原文字符(字母A-Z),用列表“棋盤位置清單”存儲這個字母加密后的數字組,保證兩個列表中的內容一一對應,如a=11,b=12,注意i=24且j=24(圖1)。
為了記錄兩個文本:未加密前的明文文本和加密后的密文文本,接下來要創建幾個變量:“原文”“密文”和“位置”(記錄每個字符所在原文列表中的編號)。設定一個“計數器”,用于循環判斷原文中每個字符的變化(圖2)。

將原文設置成用戶輸入的文本,并重復執行直到計數器超出原文的字符數,在循環的過程中判斷輸入的每個字符是否原文列表中的內容,即判斷是否為英文字母,如果在“原文字符清單”列表中,那么記錄下它的編號,到“棋盤位置清單”列表中尋找對應項進行加密,否則的話不發生變化輸出原本的字符。代碼編完后我們輸入明文測試,看看得到的密文,是否和預想的結果一致。

棋盤密碼和之前講過的愷撒密碼都是屬于古典密碼,只需要用到列表或字符串的,基本操作便可以完成了,以后我們會找一些更復雜的密碼。